Changes to packed typedef struct declarations in scsi_cdrom.c and scsi_x54x.h.

This commit is contained in:
OBattler
2018-10-21 22:14:51 +02:00
parent f088896a74
commit c3debcecd8
2 changed files with 101 additions and 130 deletions

View File

@@ -9,7 +9,7 @@
* Implementation of the CD-ROM drive with SCSI(-like) * Implementation of the CD-ROM drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage. * commands, for both ATAPI and SCSI usage.
* *
* Version: @(#)scsi_cdrom.c 1.0.53 2018/10/17 * Version: @(#)scsi_cdrom.c 1.0.54 2018/10/21
* *
* Author: Miran Grca, <mgrca8@gmail.com> * Author: Miran Grca, <mgrca8@gmail.com>
* *
@@ -68,9 +68,7 @@ typedef struct
uint16_t len; uint16_t len;
uint8_t control; uint8_t control;
} gesn_cdb_t; } gesn_cdb_t;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct typedef struct
{ {
uint16_t len; uint16_t len;

View File

@@ -11,7 +11,7 @@
* of SCSI Host Adapters made by Mylex. * of SCSI Host Adapters made by Mylex.
* These controllers were designed for various buses. * These controllers were designed for various buses.
* *
* Version: @(#)scsi_x54x.h 1.0.8 2018/10/02 * Version: @(#)scsi_x54x.h 1.0.9 2018/10/21
* *
* Authors: TheCollector1995, <mariogplayer@gmail.com> * Authors: TheCollector1995, <mariogplayer@gmail.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -118,50 +118,9 @@
#define INTR_MBIF 0x01 /* MBI full */ #define INTR_MBIF 0x01 /* MBI full */
#pragma pack(push,1)
typedef struct {
uint8_t hi;
uint8_t mid;
uint8_t lo;
} addr24;
#pragma pack(pop)
#define ADDR_TO_U32(x) (((x).hi<<16)|((x).mid<<8)|((x).lo&0xFF)) #define ADDR_TO_U32(x) (((x).hi<<16)|((x).mid<<8)|((x).lo&0xFF))
#define U32_TO_ADDR(a,x) do {(a).hi=(x)>>16;(a).mid=(x)>>8;(a).lo=(x)&0xFF;}while(0) #define U32_TO_ADDR(a,x) do {(a).hi=(x)>>16;(a).mid=(x)>>8;(a).lo=(x)&0xFF;}while(0)
/* Structure for the INQUIRE_SETUP_INFORMATION reply. */
#pragma pack(push,1)
typedef struct {
uint8_t uOffset :4,
uTransferPeriod :3,
fSynchronous :1;
} ReplyInquireSetupInformationSynchronousValue;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct {
uint8_t fSynchronousInitiationEnabled :1,
fParityCheckingEnabled :1,
uReserved1 :6;
uint8_t uBusTransferRate;
uint8_t uPreemptTimeOnBus;
uint8_t uTimeOffBus;
uint8_t cMailbox;
addr24 MailboxAddress;
ReplyInquireSetupInformationSynchronousValue SynchronousValuesId0To7[8];
uint8_t uDisconnectPermittedId0To7;
uint8_t VendorSpecificData[28];
} ReplyInquireSetupInformation;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct {
uint8_t Count;
addr24 Address;
} MailboxInit_t;
#pragma pack(pop)
/* /*
* Mailbox Definitions. * Mailbox Definitions.
* *
@@ -178,31 +137,6 @@ typedef struct {
#define MBI_NOT_FOUND 0x03 #define MBI_NOT_FOUND 0x03
#define MBI_ERROR 0x04 #define MBI_ERROR 0x04
#pragma pack(push,1)
typedef struct {
uint8_t CmdStatus;
addr24 CCBPointer;
} Mailbox_t;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct {
uint32_t CCBPointer;
union {
struct {
uint8_t Reserved[3];
uint8_t ActionCode;
} out;
struct {
uint8_t HostStatus;
uint8_t TargetStatus;
uint8_t Reserved;
uint8_t CompletionCode;
} in;
} u;
} Mailbox32_t;
#pragma pack(pop)
/* /*
* *
* CCB - SCSI Command Control Block * CCB - SCSI Command Control Block
@@ -250,13 +184,78 @@ typedef struct {
#define CCB_DUPLICATE_CCB 0x19 /* Duplicate CCB */ #define CCB_DUPLICATE_CCB 0x19 /* Duplicate CCB */
#define CCB_INVALID_CCB 0x1A /* Invalid CCB - bad parameter */ #define CCB_INVALID_CCB 0x1A /* Invalid CCB - bad parameter */
#define lba32_blk(p) ((uint32_t)(p->u.lba.lba0<<24) | (p->u.lba.lba1<<16) | \
(p->u.lba.lba2<<8) | p->u.lba.lba3)
/*
*
* Scatter/Gather Segment List Definitions
*
* Adapter limits
*/
#define MAX_SG_DESCRIPTORS 32 /* Always make the array 32 elements long, if less are used, that's not an issue. */
#pragma pack(push,1)
typedef struct {
uint8_t hi;
uint8_t mid;
uint8_t lo;
} addr24;
/* Structure for the INQUIRE_SETUP_INFORMATION reply. */
typedef struct {
uint8_t uOffset :4,
uTransferPeriod :3,
fSynchronous :1;
} ReplyInquireSetupInformationSynchronousValue;
typedef struct {
uint8_t fSynchronousInitiationEnabled :1,
fParityCheckingEnabled :1,
uReserved1 :6;
uint8_t uBusTransferRate;
uint8_t uPreemptTimeOnBus;
uint8_t uTimeOffBus;
uint8_t cMailbox;
addr24 MailboxAddress;
ReplyInquireSetupInformationSynchronousValue SynchronousValuesId0To7[8];
uint8_t uDisconnectPermittedId0To7;
uint8_t VendorSpecificData[28];
} ReplyInquireSetupInformation;
typedef struct {
uint8_t Count;
addr24 Address;
} MailboxInit_t;
typedef struct {
uint8_t CmdStatus;
addr24 CCBPointer;
} Mailbox_t;
typedef struct {
uint32_t CCBPointer;
union {
struct {
uint8_t Reserved[3];
uint8_t ActionCode;
} out;
struct {
uint8_t HostStatus;
uint8_t TargetStatus;
uint8_t Reserved;
uint8_t CompletionCode;
} in;
} u;
} Mailbox32_t;
/* Byte 15 Target Status /* Byte 15 Target Status
See scsi.h files for these statuses. See scsi.h files for these statuses.
Bytes 16 and 17 Reserved (must be 0) Bytes 16 and 17 Reserved (must be 0)
Bytes 18 through 18+n-1, where n=size of CDB Command Descriptor Block */ Bytes 18 through 18+n-1, where n=size of CDB Command Descriptor Block */
#pragma pack(push,1)
typedef struct { typedef struct {
uint8_t Opcode; uint8_t Opcode;
uint8_t Reserved1 :3, uint8_t Reserved1 :3,
@@ -278,9 +277,7 @@ typedef struct {
uint8_t Reserved3[6]; uint8_t Reserved3[6];
uint32_t SensePointer; uint32_t SensePointer;
} CCB32; } CCB32;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct { typedef struct {
uint8_t Opcode; uint8_t Opcode;
uint8_t Lun :3, uint8_t Lun :3,
@@ -297,9 +294,7 @@ typedef struct {
uint8_t Reserved[2]; uint8_t Reserved[2];
uint8_t Cdb[12]; uint8_t Cdb[12];
} CCB; } CCB;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct { typedef struct {
uint8_t Opcode; uint8_t Opcode;
uint8_t Pad1 :3, uint8_t Pad1 :3,
@@ -314,17 +309,13 @@ typedef struct {
uint8_t Pad4[2]; uint8_t Pad4[2];
uint8_t Cdb[12]; uint8_t Cdb[12];
} CCBC; } CCBC;
#pragma pack(pop)
#pragma pack(push,1)
typedef union { typedef union {
CCB32 new; CCB32 new;
CCB old; CCB old;
CCBC common; CCBC common;
} CCBU; } CCBU;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct { typedef struct {
CCBU CmdBlock; CCBU CmdBlock;
uint8_t *RequestSenseBuffer; uint8_t *RequestSenseBuffer;
@@ -336,6 +327,39 @@ typedef struct {
TargetStatus, TargetStatus,
MailboxCompletionCode; MailboxCompletionCode;
} Req_t; } Req_t;
typedef struct
{
uint8_t command;
uint8_t lun:3,
reserved:2,
id:3;
union {
struct {
uint16_t cyl;
uint8_t head;
uint8_t sec;
} chs;
struct {
uint8_t lba0; /* MSB */
uint8_t lba1;
uint8_t lba2;
uint8_t lba3; /* LSB */
} lba;
} u;
uint8_t secount;
addr24 dma_address;
} BIOSCMD;
typedef struct {
uint32_t Segment;
uint32_t SegmentPointer;
} SGE32;
typedef struct {
addr24 Segment;
addr24 SegmentPointer;
} SGE;
#pragma pack(pop) #pragma pack(pop)
typedef struct { typedef struct {
@@ -475,57 +499,6 @@ typedef struct {
} x54x_t; } x54x_t;
#pragma pack(push,1)
typedef struct
{
uint8_t command;
uint8_t lun:3,
reserved:2,
id:3;
union {
struct {
uint16_t cyl;
uint8_t head;
uint8_t sec;
} chs;
struct {
uint8_t lba0; /* MSB */
uint8_t lba1;
uint8_t lba2;
uint8_t lba3; /* LSB */
} lba;
} u;
uint8_t secount;
addr24 dma_address;
} BIOSCMD;
#pragma pack(pop)
#define lba32_blk(p) ((uint32_t)(p->u.lba.lba0<<24) | (p->u.lba.lba1<<16) | \
(p->u.lba.lba2<<8) | p->u.lba.lba3)
/*
*
* Scatter/Gather Segment List Definitions
*
* Adapter limits
*/
#define MAX_SG_DESCRIPTORS 32 /* Always make the array 32 elements long, if less are used, that's not an issue. */
#pragma pack(push,1)
typedef struct {
uint32_t Segment;
uint32_t SegmentPointer;
} SGE32;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct {
addr24 Segment;
addr24 SegmentPointer;
} SGE;
#pragma pack(pop)
extern void x54x_reset_ctrl(x54x_t *dev, uint8_t Reset); extern void x54x_reset_ctrl(x54x_t *dev, uint8_t Reset);
extern void x54x_buf_alloc(uint8_t id, int length); extern void x54x_buf_alloc(uint8_t id, int length);
extern void x54x_buf_free(uint8_t id); extern void x54x_buf_free(uint8_t id);