1 /* 2 * Mail box defs etc. 3 * these could be bigger but we need the bha_softc to fit on a single page.. 4 */ 5 #define BHA_MBX_SIZE 32 /* mail box size (MAX 255 MBxs) */ 6 /* don't need that many really */ 7 #define BHA_CCB_MAX 32 /* store up to 32 CCBs at one time */ 8 #define CCB_HASH_SIZE 32 /* hash table size for phystokv */ 9 #define CCB_HASH_SHIFT 9 10 #define CCB_HASH(x) ((((long)(x))>>CCB_HASH_SHIFT) & (CCB_HASH_SIZE - 1)) 11 12 #define bha_nextmbx(wmb, mbx, mbio) \ 13 if ((wmb) == &(mbx)->mbio[BHA_MBX_SIZE - 1]) \ 14 (wmb) = &(mbx)->mbio[0]; \ 15 else \ 16 (wmb)++; 17 18 struct bha_mbx { 19 struct bha_mbx_out mbo[BHA_MBX_SIZE]; 20 struct bha_mbx_in mbi[BHA_MBX_SIZE]; 21 struct bha_mbx_out *cmbo; /* Collection Mail Box out */ 22 struct bha_mbx_out *tmbo; /* Target Mail Box out */ 23 struct bha_mbx_in *tmbi; /* Target Mail Box in */ 24 }; 25 26 struct bha_softc { 27 struct device sc_dev; 28 bus_chipset_tag_t sc_bc; 29 30 bus_io_handle_t sc_ioh; 31 int sc_irq, sc_drq; 32 void *sc_ih; 33 34 char sc_model[7], 35 sc_firmware[6]; 36 37 struct bha_mbx sc_mbx; /* all our mailboxes */ 38 #define wmbx (&sc->sc_mbx) 39 struct bha_ccb *sc_ccbhash[CCB_HASH_SIZE]; 40 TAILQ_HEAD(, bha_ccb) sc_free_ccb, sc_waiting_ccb; 41 int sc_numccbs, sc_mbofull; 42 int sc_scsi_dev; /* adapters scsi id */ 43 struct scsi_link sc_link; /* prototype for devs */ 44 }; 45 46 int bha_find __P((bus_chipset_tag_t, bus_io_handle_t, struct bha_softc *)); 47 void bha_attach __P((struct bha_softc *)); 48 int bha_intr __P((void *)); 49