141480Smckusick /* 2*63146Sbostic * Copyright (c) 1982, 1990, 1993 3*63146Sbostic * The Regents of the University of California. All rights reserved. 441480Smckusick * 541480Smckusick * %sccs.include.redist.c% 641480Smckusick * 7*63146Sbostic * @(#)device.h 8.1 (Berkeley) 06/10/93 841480Smckusick */ 941480Smckusick 1041480Smckusick struct driver { 1141480Smckusick int (*d_init)(); 1241480Smckusick char *d_name; 1341480Smckusick int (*d_start)(); 1441480Smckusick int (*d_go)(); 1541480Smckusick int (*d_intr)(); 1641480Smckusick int (*d_done)(); 1741480Smckusick }; 1841480Smckusick 1941480Smckusick struct hp_ctlr { 2041480Smckusick struct driver *hp_driver; 2141480Smckusick int hp_unit; 2241480Smckusick int hp_alive; 2341480Smckusick char *hp_addr; 2441480Smckusick int hp_flags; 2541480Smckusick int hp_ipl; 2641480Smckusick }; 2741480Smckusick 2841480Smckusick struct hp_device { 2941480Smckusick struct driver *hp_driver; 3041480Smckusick struct driver *hp_cdriver; 3141480Smckusick int hp_unit; 3241480Smckusick int hp_ctlr; 3341480Smckusick int hp_slave; 3441480Smckusick char *hp_addr; 3541480Smckusick int hp_dk; 3641480Smckusick int hp_flags; 3741480Smckusick int hp_alive; 3841480Smckusick int hp_ipl; 3941480Smckusick }; 4041480Smckusick 4141480Smckusick struct devqueue { 4241480Smckusick struct devqueue *dq_forw; 4341480Smckusick struct devqueue *dq_back; 4441480Smckusick int dq_ctlr; 4541480Smckusick int dq_unit; 4641480Smckusick int dq_slave; 4741480Smckusick struct driver *dq_driver; 4841480Smckusick }; 4941480Smckusick 5049311Shibler #define MAXCTLRS 16 /* Size of HW table (arbitrary) */ 5149311Shibler #define MAXSLAVES 8 /* Slaves per controller (HPIB/SCSI limit) */ 5249311Shibler 5341480Smckusick struct hp_hw { 5449311Shibler caddr_t hw_pa; /* physical address of control space */ 5549311Shibler int hw_size; /* size of control space */ 5649311Shibler caddr_t hw_kva; /* kernel virtual address of control space */ 5749311Shibler short hw_id; /* HW returned id */ 5849311Shibler short hw_secid; /* secondary HW id (displays) */ 5949311Shibler short hw_type; /* type (defined below) */ 6041480Smckusick short hw_sc; /* select code (if applicable) */ 6141480Smckusick }; 6241480Smckusick 6349311Shibler /* bus types */ 6449311Shibler #define B_MASK 0xE000 6549311Shibler #define B_DIO 0x2000 6649311Shibler #define B_DIOII 0x4000 6749311Shibler #define B_VME 0x6000 6849311Shibler /* controller types */ 6949311Shibler #define C_MASK 0x8F 7049311Shibler #define C_FLAG 0x80 7149311Shibler #define C_HPIB 0x81 7249311Shibler #define C_SCSI 0x82 7349311Shibler #define C_VME 0x83 7449311Shibler /* device types (controllers with no slaves) */ 7549311Shibler #define D_MASK 0x8F 7649311Shibler #define D_BITMAP 0x01 7749311Shibler #define D_LAN 0x02 7849311Shibler #define D_FPA 0x03 7949311Shibler #define D_KEYBOARD 0x04 8049311Shibler #define D_COMMDCA 0x05 8149311Shibler #define D_COMMDCM 0x06 8249311Shibler #define D_COMMDCL 0x07 8349311Shibler #define D_PPORT 0x08 8449311Shibler #define D_MISC 0x7F 8541480Smckusick 8649311Shibler #define HW_ISCTLR(hw) ((hw)->hw_type & C_FLAG) 8749311Shibler #define HW_ISDIOII(hw) ((hw)->hw_type & B_DIOII) 8849311Shibler #define HW_ISHPIB(hw) (((hw)->hw_type & C_MASK) == C_HPIB) 8949311Shibler #define HW_ISSCSI(hw) (((hw)->hw_type & C_MASK) == C_SCSI) 9049311Shibler #define HW_ISDEV(hw,d) (((hw)->hw_type & D_MASK) == (d)) 9141480Smckusick 9241480Smckusick #ifdef KERNEL 9353923Shibler #ifdef hp300 9449311Shibler extern struct hp_hw sc_table[]; 9549311Shibler extern struct hp_ctlr hp_cinit[]; 9649311Shibler extern struct hp_device hp_dinit[]; 9749311Shibler extern caddr_t sctova(), sctopa(), iomap(); 9841480Smckusick #endif 9953923Shibler #endif 100