1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 1995--2003 Geert Uytterhoeven 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public 8*4882a593Smuzhiyun * License. See the file COPYING in the main directory of this archive 9*4882a593Smuzhiyun * for more details. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _UAPI_LINUX_ZORRO_H 13*4882a593Smuzhiyun #define _UAPI_LINUX_ZORRO_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include <linux/types.h> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * Each Zorro board has a 32-bit ID of the form 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * mmmmmmmmmmmmmmmmppppppppeeeeeeee 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * with 24*4882a593Smuzhiyun * 25*4882a593Smuzhiyun * mmmmmmmmmmmmmmmm 16-bit Manufacturer ID (assigned by CBM (sigh)) 26*4882a593Smuzhiyun * pppppppp 8-bit Product ID (assigned by manufacturer) 27*4882a593Smuzhiyun * eeeeeeee 8-bit Extended Product ID (currently only used 28*4882a593Smuzhiyun * for some GVP boards) 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define ZORRO_MANUF(id) ((id) >> 16) 33*4882a593Smuzhiyun #define ZORRO_PROD(id) (((id) >> 8) & 0xff) 34*4882a593Smuzhiyun #define ZORRO_EPC(id) ((id) & 0xff) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define ZORRO_ID(manuf, prod, epc) \ 37*4882a593Smuzhiyun ((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc)) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun typedef __u32 zorro_id; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* Include the ID list */ 43*4882a593Smuzhiyun #include <linux/zorro_ids.h> 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* 47*4882a593Smuzhiyun * GVP identifies most of its products through the 'extended product code' 48*4882a593Smuzhiyun * (epc). The epc has to be ANDed with the GVP_PRODMASK before the 49*4882a593Smuzhiyun * identification. 50*4882a593Smuzhiyun */ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define GVP_PRODMASK (0xf8) 53*4882a593Smuzhiyun #define GVP_SCSICLKMASK (0x01) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun enum GVP_flags { 56*4882a593Smuzhiyun GVP_IO = 0x01, 57*4882a593Smuzhiyun GVP_ACCEL = 0x02, 58*4882a593Smuzhiyun GVP_SCSI = 0x04, 59*4882a593Smuzhiyun GVP_24BITDMA = 0x08, 60*4882a593Smuzhiyun GVP_25BITDMA = 0x10, 61*4882a593Smuzhiyun GVP_NOBANK = 0x20, 62*4882a593Smuzhiyun GVP_14MHZ = 0x40, 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun struct Node { 67*4882a593Smuzhiyun __be32 ln_Succ; /* Pointer to next (successor) */ 68*4882a593Smuzhiyun __be32 ln_Pred; /* Pointer to previous (predecessor) */ 69*4882a593Smuzhiyun __u8 ln_Type; 70*4882a593Smuzhiyun __s8 ln_Pri; /* Priority, for sorting */ 71*4882a593Smuzhiyun __be32 ln_Name; /* ID string, null terminated */ 72*4882a593Smuzhiyun } __packed; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun struct ExpansionRom { 75*4882a593Smuzhiyun /* -First 16 bytes of the expansion ROM */ 76*4882a593Smuzhiyun __u8 er_Type; /* Board type, size and flags */ 77*4882a593Smuzhiyun __u8 er_Product; /* Product number, assigned by manufacturer */ 78*4882a593Smuzhiyun __u8 er_Flags; /* Flags */ 79*4882a593Smuzhiyun __u8 er_Reserved03; /* Must be zero ($ff inverted) */ 80*4882a593Smuzhiyun __be16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ 81*4882a593Smuzhiyun __be32 er_SerialNumber; /* Available for use by manufacturer */ 82*4882a593Smuzhiyun __be16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */ 83*4882a593Smuzhiyun __u8 er_Reserved0c; 84*4882a593Smuzhiyun __u8 er_Reserved0d; 85*4882a593Smuzhiyun __u8 er_Reserved0e; 86*4882a593Smuzhiyun __u8 er_Reserved0f; 87*4882a593Smuzhiyun } __packed; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* er_Type board type bits */ 90*4882a593Smuzhiyun #define ERT_TYPEMASK 0xc0 91*4882a593Smuzhiyun #define ERT_ZORROII 0xc0 92*4882a593Smuzhiyun #define ERT_ZORROIII 0x80 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* other bits defined in er_Type */ 95*4882a593Smuzhiyun #define ERTB_MEMLIST 5 /* Link RAM into free memory list */ 96*4882a593Smuzhiyun #define ERTF_MEMLIST (1<<5) 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun struct ConfigDev { 99*4882a593Smuzhiyun struct Node cd_Node; 100*4882a593Smuzhiyun __u8 cd_Flags; /* (read/write) */ 101*4882a593Smuzhiyun __u8 cd_Pad; /* reserved */ 102*4882a593Smuzhiyun struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */ 103*4882a593Smuzhiyun __be32 cd_BoardAddr; /* where in memory the board was placed */ 104*4882a593Smuzhiyun __be32 cd_BoardSize; /* size of board in bytes */ 105*4882a593Smuzhiyun __be16 cd_SlotAddr; /* which slot number (PRIVATE) */ 106*4882a593Smuzhiyun __be16 cd_SlotSize; /* number of slots (PRIVATE) */ 107*4882a593Smuzhiyun __be32 cd_Driver; /* pointer to node of driver */ 108*4882a593Smuzhiyun __be32 cd_NextCD; /* linked list of drivers to config */ 109*4882a593Smuzhiyun __be32 cd_Unused[4]; /* for whatever the driver wants */ 110*4882a593Smuzhiyun } __packed; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define ZORRO_NUM_AUTO 16 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun #endif /* _UAPI_LINUX_ZORRO_H */ 115