mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-06-07 08:14:48 +00:00
AHCI headers part 1
This commit is contained in:
parent
0bbced2c7d
commit
e92c1ca443
Binary file not shown.
2
mnt.ps1
2
mnt.ps1
@ -1,3 +1,3 @@
|
||||
copy -r -Force E:/* ~/Desktop/zenithos/src/
|
||||
copy -r -Force D:/* ~/Desktop/zenithos/src/
|
||||
del ~/Desktop/zenithos/*.iso
|
||||
move ~/Desktop/zenithos/src/Tmp/MyDistro.ISO.C ~/Desktop/zenithos/Zenith-latest-$(get-date -Format "yyyy-MM-dd-HH_mm_ss").iso
|
||||
|
@ -1,4 +1,4 @@
|
||||
Ed("/Doc/ChangeLog.DD");
|
||||
//Ed("/Doc/ChangeLog.DD");
|
||||
|
||||
In("CC\n\n1\n\n5\n\n\n");
|
||||
BootHDIns;
|
||||
|
@ -170,7 +170,7 @@ I64 ATAGetDevId(CBlkDev *bd,F64 timeout,Bool keep_id_record)
|
||||
OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4);
|
||||
else
|
||||
OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4);
|
||||
ATACmd(bd,ATA_ID_DEV);
|
||||
ATACmd(bd,ATA_IDENTIFY);
|
||||
if (ATAWaitNotBUSY(bd,timeout)) {
|
||||
if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR)
|
||||
res=BDT_ATAPI;
|
||||
|
@ -2673,7 +2673,6 @@ class CSMBIOSBatteryInfo
|
||||
class CPCIDev
|
||||
{
|
||||
CPCIDev *next, *last;
|
||||
|
||||
U8 bus,dev,fun,
|
||||
*vendor_str,
|
||||
*dev_id_str,
|
||||
@ -2690,12 +2689,10 @@ class CPCIDev
|
||||
interrupt_pin,
|
||||
min_grant,
|
||||
max_latency;
|
||||
|
||||
U16 vendor_id,
|
||||
device_id,
|
||||
subsys_id,
|
||||
subsys_vendor_id;
|
||||
|
||||
U32 base[6],
|
||||
erom;
|
||||
};
|
||||
@ -2712,6 +2709,155 @@ public class CATARep
|
||||
irq;
|
||||
};
|
||||
|
||||
#help_index "Devices;Disk/AHCI"
|
||||
#define AHCI_MAX_PORTS 32
|
||||
|
||||
//Physical Region Descriptor Table
|
||||
#define AHCI_PRDT_MAX_LEN 32
|
||||
#define AHCI_PRDT_BYTES_BITS 22
|
||||
#define AHCI_PRDT_BYTES (1 << AHCI_PRDT_BYTES_BITS)
|
||||
#define AHCI_PRDT_MAX_BLOCKS (U16_MAX + 1)
|
||||
|
||||
//Global Host Control (Controller) flags
|
||||
#define AHCI_GHCf_HBA_RESET 0
|
||||
#define AHCI_GHCf_INTERRUPT_ENABLE 1
|
||||
#define AHCI_GHCf_AHCI_ENABLE 31
|
||||
|
||||
#define AHCI_CAPSf_S64A 31 //Supports 64-bit Addressing
|
||||
|
||||
#define AHCI_CAPSEXTf_BOH 0 //Supports BIOS/OS Handoff
|
||||
|
||||
//BIOS/OS Handoff Control
|
||||
#define AHCI_BOHCf_BOS 0 //BIOS-Owned Semaphore (BIOS owns controller)
|
||||
#define AHCI_BOHCf_OOS 1 //OS-Owned Semaphore (OS owns controller)
|
||||
#define AHCI_BOHCf_BB 4 //BIOS Busy (polling bit while BIOS cleans up things after ownership transfer)
|
||||
|
||||
//Command Header flags
|
||||
#define AHCI_CH_DESCf_W 6 //'Write' bit. Set when data is being written.
|
||||
#define AHCI_CH_DESCF_W (1 << AHCI_CH_DESCf_W)
|
||||
|
||||
//Command FIS flags
|
||||
#define AHCI_CF_DESCf_C 7 //'Command' bit. Set when FIS is an ATA command.
|
||||
#define AHCI_CF_DESCF_C (1 << AHCI_CF_DESCF_C)
|
||||
|
||||
//Port register flags
|
||||
//Command and Status register flags
|
||||
#define AHCI_PxCMDf_ST 0 //'Start'. Start processing commmand list. FRE must be set before.
|
||||
#define AHCI_PxCMDf_SUD 1 //'Spin-Up Device'. For devices that support Staggered Spin-up. We attempt to set it for all ports.
|
||||
#define AHCI_PxCMDf_POD 2 //'Power-On Device'. For devices that support Cold Presence. We attempt to set it for all ports.
|
||||
#define AHCI_PxCMDf_FRE 4 //'FIS Receive Enable'. Allows the processing of FISes.
|
||||
#define AHCI_PxCMDf_FR 14 //'FIS receive Running'. Status indicator for FRE.
|
||||
#define AHCI_PxCMDf_CR 15 //'Command list Running'. Status indicator for ST.
|
||||
#define AHCI_PxCMDf_ATAPI 24 //'Device is ATAPI'. When set, HBA turns on desktop LED when device is in use. For ATAPI devices.
|
||||
#define AHCI_PxCMDF_ST (1 << AHCI_PxCMDf_ST)
|
||||
#define AHCI_PxCMDF_SUD (1 << AHCI_PxCMDf_SUD)
|
||||
#define AHCI_PxCMDF_POD (1 << AHCI_PxCMDf_POD)
|
||||
#define AHCI_PxCMDF_FRE (1 << AHCI_PxCMDf_FRE)
|
||||
#define AHCI_PxCMDF_FR (1 << AHCI_PxCMDf_FR)
|
||||
#define AHCI_PxCMDF_CR (1 << AHCI_PxCMDf_CR)
|
||||
#define AHCI_PxCMDF_ATAPI (1 << AHCI_PxCMDf_ATAPI)
|
||||
|
||||
//Signature types
|
||||
#define AHCI_PxSIG_ATA 0x00000101
|
||||
#define AHCI_PxSIG_ATAPI 0xEB140101
|
||||
#define AHCI_PxSIG_SEMB 0xC33C0101 //Enclosure Management Bridge... rare to encounter in wild.
|
||||
#define AHCI_PxSIG_PM 0x96690101 //Port multiplier... not relevant to PC-type systems.
|
||||
|
||||
class CAHCIPort
|
||||
{//Port register layout
|
||||
U32 cmd_list_base,
|
||||
cmd_list_base_upper,
|
||||
fis_base,
|
||||
fis_base_upper,
|
||||
interrupt_status,
|
||||
interrupt_enable,
|
||||
command,
|
||||
reserved,
|
||||
task_file_data,
|
||||
signature,
|
||||
sata_status,
|
||||
sata_ctrl,
|
||||
sata_error,
|
||||
sata_active,
|
||||
cmd_issue,
|
||||
sata_notif,
|
||||
fis_switch_ctrl,
|
||||
device_sleep;
|
||||
U8 reserved[40],
|
||||
vendor[16];
|
||||
};
|
||||
|
||||
class CAHCIHba
|
||||
{//HBA register layout
|
||||
U32 caps,
|
||||
ghc, //Global Host Control
|
||||
interrupt_status,
|
||||
ports_implemented,
|
||||
version,
|
||||
ccc_ctrl, //Command Completion Coalescing
|
||||
ccc_ports,
|
||||
em_location,//Enclosure Management
|
||||
em_ctrl,
|
||||
caps_ext,
|
||||
bohc;
|
||||
U8 reserved[116],
|
||||
vendor[96];
|
||||
CAHCIPort ports[32];
|
||||
};
|
||||
|
||||
#define FISt_H2D 0x27
|
||||
|
||||
class CFisH2D
|
||||
{//Host To Device
|
||||
U8 type,
|
||||
desc, //We are concerned with bit #7 ($LK,"AHCI_CF_DESCf_C",A="MN:AHCI_CF_DESCf_C"$) 1=command, 0=control.
|
||||
command,
|
||||
feature_low,
|
||||
lba0,
|
||||
lba1,
|
||||
lba2,
|
||||
device,
|
||||
lba3,
|
||||
lba4,
|
||||
lba5,
|
||||
feature_high;
|
||||
U16 count;
|
||||
U8 icc,
|
||||
ctrl;
|
||||
U32 reserved;
|
||||
};
|
||||
|
||||
class CPrdtEntry
|
||||
{
|
||||
U32 data_base,
|
||||
data_base_upper,
|
||||
reserved,
|
||||
data_byte_count; //bit 31 is "Interrupt on Completion". bits 21:0 are the actual count.
|
||||
};
|
||||
|
||||
class CHBACmdHeader
|
||||
{
|
||||
U16 desc, //$LK,"AHCI_CH_DESCf_W",A="MN:AHCI_CH_DESCf_W"$ 1=write 0=read ATAPI too too TODO
|
||||
prdt_len;
|
||||
U32 prd_byte_count,
|
||||
cmd_table_base,
|
||||
cmd_table_base_upper,
|
||||
reserved[4];
|
||||
};
|
||||
|
||||
class CHBACmdTable
|
||||
{
|
||||
U8 command_fis[64],
|
||||
acmd[16],
|
||||
reserved[48];
|
||||
CPrdtEntry prdt[8];
|
||||
};
|
||||
|
||||
//ATA_IDENTIFY command array indexes (array of U16s)
|
||||
#define ATA_IDENT_SERIAL_NUM 10
|
||||
#define ATA_IDENT_MODEL_NUM 27
|
||||
#define ATA_IDENT_LBA48_CAPACITY 100
|
||||
|
||||
//See $LK,"::/Doc/Credits.DD"$.
|
||||
#define ATA_NOP 0x00
|
||||
#define ATA_DEV_RST 0x08
|
||||
@ -2722,9 +2868,11 @@ public class CATARep
|
||||
#define ATA_SET_MAX_EXT 0x37
|
||||
#define ATA_READ_MULTI 0xC4
|
||||
#define ATA_READ_MULTI_EXT 0x29
|
||||
#define ATA_READ_DMA_EXT 0x25
|
||||
#define ATA_WRITE_MULTI 0xC5
|
||||
#define ATA_WRITE_MULTI_EXT 0x39
|
||||
#define ATA_ID_DEV 0xEC
|
||||
#define ATA_WRITE_DMA_EXT 0x35
|
||||
#define ATA_IDENTIFY 0xEC
|
||||
|
||||
#define ATAS_ERR 0x01
|
||||
#define ATAS_DRQ 0x08
|
||||
@ -3052,40 +3200,52 @@ public class CDirEntry
|
||||
#define BDf_FORMAT 6
|
||||
#define BDf_INIT_IN_PROGRESS 7
|
||||
#define BDf_EXT_SIZE 8
|
||||
#define BDf_INTERNAL_BUF 9
|
||||
|
||||
#define BDF_REMOVABLE 0x001
|
||||
#define BDF_INITIALIZED 0x002
|
||||
#define BDF_READ_ONLY 0x004
|
||||
#define BDF_READ_ONLY_OVERRIDE 0x008
|
||||
#define BDF_LAST_WAS_WRITE 0x010
|
||||
#define BDF_READ_CACHE 0x020
|
||||
#define BDF_FORMAT 0x040
|
||||
#define BDF_INIT_IN_PROGRESS 0x080
|
||||
#define BDF_EXT_SIZE 0x100
|
||||
#define BDF_REMOVABLE (1 << BDf_REMOVABLE)
|
||||
#define BDF_INITIALIZED (1 << BDf_INITIALIZED)
|
||||
#define BDF_READ_ONLY (1 << BDf_READ_ONLY)
|
||||
#define BDF_READ_ONLY_OVERRIDE (1 << BDf_READ_ONLY_OVERRIDE)
|
||||
#define BDF_LAST_WAS_WRITE (1 << BDf_LAST_WAS_WRITE)
|
||||
#define BDF_READ_CACHE (1 << BDf_READ_CACHE)
|
||||
#define BDF_FORMAT (1 << BDf_FORMAT)
|
||||
#define BDF_INIT_IN_PROGRESS (1 << BDf_INIT_IN_PROGRESS)
|
||||
#define BDF_EXT_SIZE (1 << BDf_EXT_SIZE)
|
||||
#define BDF_INTERNAL_BUF (1 << BDf_INTERNAL_BUF)
|
||||
|
||||
//locked flags
|
||||
#define BDlf_LOCKED 0
|
||||
|
||||
#define BLKDEVS_NUM 26
|
||||
#define BD_SIGNATURE_VAL 'BDSV'
|
||||
|
||||
public class CBlkDev
|
||||
{
|
||||
CBlkDev *lock_fwding; //If two blkdevs on same controller, use just one lock
|
||||
I64 locked_flags;
|
||||
U32 bd_signature,
|
||||
type,flags;
|
||||
U8 first_drive_let,unit,pad[2];
|
||||
U32 base0,base1,
|
||||
blk_size;
|
||||
I64 drv_offset,init_root_dir_blks,
|
||||
max_blk;
|
||||
U16 *dev_id_record;
|
||||
U8 *RAM_disk,
|
||||
CTask *owning_task;
|
||||
CAHCIPort *ahci_port;
|
||||
U8 *prd_buf,
|
||||
first_drive_let,
|
||||
unit,
|
||||
pad[2],
|
||||
*RAM_disk,
|
||||
*file_disk_name;
|
||||
CFile *file_disk;
|
||||
CTask *owning_task;
|
||||
U32 bd_signature,
|
||||
type,
|
||||
flags,
|
||||
base0,
|
||||
base1,
|
||||
blk_size,
|
||||
max_reads,
|
||||
max_writes;
|
||||
I64 drv_offset,
|
||||
init_root_dir_blks,
|
||||
max_blk,
|
||||
locked_flags,
|
||||
port_number;
|
||||
U16 *dev_id_record;
|
||||
F64 last_time;
|
||||
U32 max_reads,max_writes;
|
||||
};
|
||||
|
||||
//Drive locked_flags
|
||||
@ -3169,6 +3329,7 @@ public class CBlkDevGlobals
|
||||
CBlkDev *blkdevs;
|
||||
CDrive *drvs,
|
||||
*let_to_drive[32];
|
||||
CAHCIHba *ahci_hba;
|
||||
U8 *default_iso_filename, //$TX,"\"::/Tmp/CDDVD.ISO\"",D="DEFAULT_ISO_FILENAME"$
|
||||
*default_iso_c_filename, //$TX,"\"::/Tmp/CDDVD.ISO.C\"",D="DEFAULT_ISO_C_FILENAME"$
|
||||
*tmp_filename,
|
||||
@ -3183,11 +3344,13 @@ public class CBlkDevGlobals
|
||||
read_count,
|
||||
write_count,
|
||||
mount_ide_auto_count,
|
||||
cmd_slot_count,
|
||||
ins_base0,
|
||||
ins_base1; //Install cd/dvd controller.
|
||||
Bool dvd_boot_is_good,
|
||||
ins_unit,
|
||||
pad[3];
|
||||
ahci64,
|
||||
pad[2];
|
||||
};
|
||||
|
||||
#help_index "File/Internal"
|
||||
|
Loading…
x
Reference in New Issue
Block a user