|
|
1.1 root 1: /*
2: * Copyright (c) 1993 NeXT Computer, Inc.
3: *
4: * AHAControllerPrivate.h - Adaptec 1542 SCSI controller private typedefs.
5: *
6: * HISTORY
7: *
8: * 13 Apr 1993 Doug Mitchell at NeXT
9: * Created.
10: */
11:
12: #import <machkit/NXLock.h>
13: #import <mach/mach_types.h>
14: #import <mach/message.h>
15: #import <driverkit/interruptMsg.h>
16: #import "AHAController.h"
17: #import "AHATypes.h"
18: #import <driverkit/debugging.h>
19:
20: /*
21: * Command to be executed by I/O thread.
22: */
23: typedef enum {
24: AO_Execute, // execute IOSCSIRequest
25: AO_Reset, // reset bus
26: AO_Abort // abort I/O thread
27: } AHAOp;
28:
29: /*
30: * Command struct passed from exported methods (executeRequest and
31: * resetSCSIBus) to the I/O thread. This struct is passed via commandQ.
32: */
33: typedef struct {
34: AHAOp op; // AO_Execute, etc.
35:
36: /*
37: * The following 3 fields are only valid if op == AH_Execute.
38: */
39: IOSCSIRequest *scsiReq;
40: void *buffer;
41: vm_task_t client;
42:
43: sc_status_t result; // status upon completion
44: NXConditionLock *cmdLock; // client waits on this
45: queue_chain_t link; // for enqueueing on commandQ
46: } AHACommandBuf;
47:
48: /*
49: * Condition variable states for AHACommandBuf.cmdLock.
50: */
51: #define CMD_PENDING 0
52: #define CMD_COMPLETE 1
53:
54: /*
55: * DDM masks and macros.
56: */
57: /*
58: * The index into IODDMMasks[].
59: */
60: #define AHA_DDM_INDEX 2
61:
62: #define DDM_EXPORTED 0x00000001 // exported methods
63: #define DDM_IOTHREAD 0x00000002 // I/O thread methods
64: #define DDM_INIT 0x00000004 // Initialization
65:
66: #define ddm_exp(x, a, b, c, d, e) \
67: IODEBUG(AHA_DDM_INDEX, DDM_EXPORTED, x, a, b, c, d, e)
68:
69: #define ddm_thr(x, a, b, c, d, e) \
70: IODEBUG(AHA_DDM_INDEX, DDM_IOTHREAD, x, a, b, c, d, e)
71:
72: #define ddm_init(x, a, b, c, d, e) \
73: IODEBUG(AHA_DDM_INDEX, DDM_INIT, x, a, b, c, d, e)
74:
75:
76: /*
77: * Public low-level routines in AHARoutines.m.
78: */
79: extern void aha_reset_board(unsigned short base,
80: unsigned char aha_board_id);
81: boolean_t aha_setup_mb_area(unsigned short base,
82: struct aha_mb_area *aha_mb_area,
83: struct ccb *aha_ccb);
84: extern void aha_start_scsi(unsigned short base);
85: extern void aha_unlock_mb(unsigned short base);
86: extern boolean_t aha_cmd(unsigned short base,
87: unsigned char cmd,
88: unsigned char *args,
89: int arglen,
90: unsigned char *reply,
91: int replylen,
92: boolean_t polled
93: );
94: extern boolean_t aha_probe_cmd(
95: unsigned short base,
96: unsigned char cmd,
97: unsigned char *args,
98: int arglen,
99: unsigned char *reply,
100: int replylen,
101: boolean_t polled
102: );
103:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.