|
|
1.1 ! root 1: /* mbavar.h 4.15 81/04/08 */ ! 2: ! 3: /* ! 4: * This file contains definitions related to the kernel structures ! 5: * for dealing with the massbus adapters. ! 6: * ! 7: * Each mba has a mba_hd structure. ! 8: * Each massbus device has a mba_device structure. ! 9: * Each massbus slave has a mba_slave structure. ! 10: * ! 11: * At boot time we prowl the structures and fill in the pointers ! 12: * for devices which we find. ! 13: */ ! 14: ! 15: /* ! 16: * Per-mba structure. ! 17: * ! 18: * The initialization routine uses the information in the mbdinit table ! 19: * to initialize the what is attached to each massbus slot information. ! 20: * It counts the number of devices on each mba (to see if bothering to ! 21: * search/seek is appropriate). ! 22: * ! 23: * During normal operation, the devices attached to the mba which wish ! 24: * to transfer are queued on the mh_act? links. ! 25: */ ! 26: struct mba_hd { ! 27: short mh_active; /* set if mba is active */ ! 28: short mh_ndrive; /* number of devices, to avoid seeks */ ! 29: struct mba_regs *mh_mba; /* virt addr of mba */ ! 30: struct mba_regs *mh_physmba; /* phys addr of mba */ ! 31: struct mba_device *mh_mbip[8]; /* what is attached to each dev */ ! 32: struct mba_device *mh_actf; /* head of queue to transfer */ ! 33: struct mba_device *mh_actl; /* tail of queue to transfer */ ! 34: }; ! 35: ! 36: /* ! 37: * Per-device structure ! 38: * (one for each RM/RP disk, and one for each tape formatter). ! 39: * ! 40: * This structure is used by the device driver as its argument ! 41: * to the massbus driver, and by the massbus driver to locate ! 42: * the device driver for a particular massbus slot. ! 43: * ! 44: * The device drivers hang ready buffers on this structure, ! 45: * and the massbus driver will start i/o on the first such buffer ! 46: * when appropriate. ! 47: */ ! 48: struct mba_device { ! 49: struct mba_driver *mi_driver; ! 50: short mi_unit; /* unit number to the system */ ! 51: short mi_mbanum; /* the mba it is on */ ! 52: short mi_drive; /* controller on mba */ ! 53: short mi_dk; /* driver number for iostat */ ! 54: short mi_alive; /* device exists */ ! 55: short mi_type; /* driver specific unit type */ ! 56: struct buf mi_tab; /* head of queue for this device */ ! 57: struct mba_device *mi_forw; ! 58: /* we could compute these every time, but hereby save time */ ! 59: struct mba_regs *mi_mba; ! 60: struct mba_drv *mi_drv; ! 61: struct mba_hd *mi_hd; ! 62: }; ! 63: ! 64: /* ! 65: * Tape formatter slaves are specified by ! 66: * the following information which is used ! 67: * at boot time to initialize the tape driver ! 68: * internal tables. ! 69: */ ! 70: struct mba_slave { ! 71: struct mba_driver *ms_driver; ! 72: short ms_ctlr; /* which of several formatters */ ! 73: short ms_unit; /* which unit to system */ ! 74: short ms_slave; /* which slave to formatter */ ! 75: short ms_alive; ! 76: }; ! 77: ! 78: /* ! 79: * Per device-type structure. ! 80: * ! 81: * Each massbus driver defines entries for a set of routines used ! 82: * by the massbus driver, as well as an array of types which are ! 83: * acceptable to it. ! 84: */ ! 85: struct mba_driver { ! 86: int (*md_attach)(); /* attach a device */ ! 87: int (*md_slave)(); /* attach a slave */ ! 88: int (*md_ustart)(); /* unit start routine */ ! 89: int (*md_start)(); /* setup a data transfer */ ! 90: int (*md_dtint)(); /* data transfer complete */ ! 91: int (*md_ndint)(); /* non-data transfer interrupt */ ! 92: short *md_type; /* array of drive type codes */ ! 93: char *md_dname, *md_sname; /* device, slave names */ ! 94: struct mba_device **md_info; /* backpointers to mbinit structs */ ! 95: }; ! 96: ! 97: /* ! 98: * Possible return values from unit start routines. ! 99: */ ! 100: #define MBU_NEXT 0 /* skip to next operation */ ! 101: #define MBU_BUSY 1 /* dual port busy; wait for intr */ ! 102: #define MBU_STARTED 2 /* non-data transfer started */ ! 103: #define MBU_DODATA 3 /* data transfer ready; start mba */ ! 104: ! 105: /* ! 106: * Possible return values from data transfer interrupt handling routines ! 107: */ ! 108: #define MBD_DONE 0 /* data transfer complete */ ! 109: #define MBD_RETRY 1 /* error occurred, please retry */ ! 110: #define MBD_RESTARTED 2 /* driver restarted i/o itself */ ! 111: ! 112: /* ! 113: * Possible return values from non-data-transfer interrupt handling routines ! 114: */ ! 115: #define MBN_DONE 0 /* non-data transfer complete */ ! 116: #define MBN_RETRY 1 /* failed; retry the operation */ ! 117: #define MBN_SKIP 2 /* don't do anything */ ! 118: ! 119: /* ! 120: * Clear attention status for specified device. ! 121: */ ! 122: #define mbclrattn(mi) ((mi)->mi_mba->mba_drv[0].mbd_as = 1 << (mi)->mi_drive) ! 123: ! 124: /* ! 125: * Kernel definitions related to mba. ! 126: */ ! 127: #ifdef KERNEL ! 128: int nummba; ! 129: #if NMBA > 0 ! 130: struct mba_hd mba_hd[NMBA]; ! 131: extern Xmba0int(), Xmba1int(), Xmba2int(), Xmba3int(); ! 132: ! 133: extern struct mba_device mbdinit[]; ! 134: extern struct mba_slave mbsinit[]; ! 135: #endif ! 136: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.