125 lines
3.8 KiB
C
125 lines
3.8 KiB
C
/*
|
|
* @(#)ipvar.h 1.1 94/10/31 Copyright (c) 1988 by Sun Microsystems, Inc.
|
|
*
|
|
*/
|
|
|
|
#ifndef _IPIVAR_
|
|
#define _IPIVAR_
|
|
|
|
|
|
/* controller structure */
|
|
#define NLPART NDKMAP
|
|
#define LPART(dev) (dev & 07)
|
|
#define MAXUNITS 16
|
|
|
|
/*
|
|
* Packet control Block
|
|
*/
|
|
struct ippcb {
|
|
struct ipictlr *pcb_c; /* pointer to controller struct */
|
|
struct ipiunit *pcb_un; /* ptr to unit struct */
|
|
|
|
struct buf *pcb_bp; /* know my buffer */
|
|
struct ippcb *pcb_prev; /* prev pcb */
|
|
struct ippcb *pcb_next;
|
|
int pcb_retry;
|
|
|
|
int pcb_mbcookie;
|
|
|
|
u_char pcb_flags;
|
|
u_char pcb_mode;
|
|
u_char pcb_inuse;
|
|
u_char pcb_busy;
|
|
|
|
short pcb_timecount;
|
|
short pcb_errcnt;
|
|
|
|
struct ipi3pkt *pcb_ppkt; /* pointer to pkt */
|
|
};
|
|
|
|
/*
|
|
* Controller structure One per controller
|
|
*/
|
|
struct ipictlr {
|
|
struct mb_ctlr *c_mc; /* Back pointer to mb_ctlr structure */
|
|
struct ipiunit *c_units[MAXUNITS];/* max units on controller */
|
|
struct ipidevice *c_io; /* ptr to I/O space data */
|
|
struct ipi3pkt *c_commandpkts;
|
|
int c_busy; /* controller is busy */
|
|
int c_pend; /* set - pending for DVMA alloc */
|
|
int c_intpri; /* interrupt priority */
|
|
int c_intvec; /* interrupt vector */
|
|
u_long c_flags; /* state information */
|
|
struct ippcb c_pcbhdr; /* pcb header link list manip */
|
|
struct buf c_bufhdr; /* buf hdr link list manip */
|
|
struct ippcb *c_ppcbsent; /* pcbs sent this far */
|
|
};
|
|
|
|
|
|
/*
|
|
* Unit structure One per drive
|
|
*/
|
|
struct ipiunit {
|
|
struct ipictlr *c; /* controller */
|
|
struct dk_map *un_map; /* logical partitions */
|
|
struct dk_geom *un_g; /* disk geometry */
|
|
struct buf *un_rtab; /* for physio */
|
|
int un_ltick; /* last time active */
|
|
struct mb_device *un_md; /* generic unit */
|
|
struct mb_ctlr *un_mc; /* generic controller */
|
|
struct dkbad *un_bad; /* bad sector info */
|
|
int un_errsect;/* sector in error */
|
|
u_char un_errno; /* error number */
|
|
u_char un_errsevere; /* error severity */
|
|
u_short un_errcmd; /* command in error */
|
|
u_char un_flags; /* state information */
|
|
};
|
|
|
|
|
|
#define IATTACHED 0x10
|
|
#define ISLAVED 0x20
|
|
#define IOPEN 0x40
|
|
|
|
/* OPCODES */
|
|
#define IP_ATTRIBUTES 0x02 /* Initialize, report, or load slave attribute */
|
|
#define IP_ALLOC_RESTOR 0x34 /* Allocate restore */
|
|
#define IP_SLAVE_DIAG 0x80 /* Perform Slave Diagnostics */
|
|
#define IP_FACIL_DIAG 0x81 /* Perform Facility Diagnostics */
|
|
#define IP_FORMAT 0x28 /* Format */
|
|
#define IP_NOP 0x00 /* Nop */
|
|
#define IP_OPER_MODE 0x07 /* Set Operating mode of facility */
|
|
#define IP_PORT_ADDR 0x04 /* Port Address */
|
|
#define IP_POS_CTL 0x41 /* Position Control */
|
|
#define IP_READ 0x10 /* Read */
|
|
#define IP_READ_BUF 0x52 /* Read Buffer */
|
|
#define IP_WRITE_BUF 0x62 /* Write Buffer */
|
|
#define IP_READ_DEFLIST 0x82 /* Read Defect List */
|
|
#define IP_WRITE_DEFLIST 0x83 /* Read Defect List */
|
|
#define IP_READ_ERRLOG 0x84 /* Read Error Log */
|
|
#define IP_REALLOC 0x33 /* Reallocate Defect */
|
|
#define IP_REPORT_STAT 0x03 /* Report Addressee Status */
|
|
#define IP_REPORT_POS 0x42 /* Report Position */
|
|
#define IP_WRITE 0x20 /* Write */
|
|
#define IP_STAT 0x91 /* Read Statistics */
|
|
|
|
/* Bitdefs for Opcode Modifiers */
|
|
|
|
#define RWMOD 1 /* read: only read good data. write: */
|
|
|
|
#define IP_SYNC 0x1
|
|
#define IP_ASYNC 0x2
|
|
#define IP_SLEEP 0x3
|
|
|
|
#define IP_IN 0x1
|
|
#define IP_OUT 0x2
|
|
|
|
/* opcodes for ioctl */
|
|
#define IP_DIAG_ENTER 0x77
|
|
#define IP_DIAG_EXIT 0x78
|
|
#define IP_MAPDVMA 0x79
|
|
#define IP_MAPREGS 0x7a
|
|
|
|
#define PCB_GOT_DVMA 0x4
|
|
#define PCB_FAKEBP 0x8 /* pcb carries a fake bp */
|
|
#endif _IPIVAR_
|