Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


checkpoint changes to get "reset to BIOS" working.
[palacios.git] / palacios / src / devices / atapi-types.h
index 1f4df14..299a2bb 100644 (file)
@@ -39,6 +39,14 @@ typedef enum  {
     ASC_LOG_BLK_OOR = 0x21                  /* LOGICAL BLOCK OUT OF RANGE */
 } atapi_add_sense_code_t ; 
 
+struct atapi_irq_flags {
+    uint8_t c_d    : 1; 
+    uint8_t io_dir : 1; 
+    uint8_t rel    : 1; 
+    uint8_t tag    : 5;
+} __attribute__((packed));
+
+
 
 struct atapi_sense_data {
     union {
@@ -59,6 +67,36 @@ struct atapi_sense_data {
 } __attribute__((packed));
 
 
+struct atapi_error_recovery {
+    union {
+       uint8_t buf[12];
+       struct {
+           uint8_t page_code     : 6;
+           uint8_t rsvd          : 1;
+           uint8_t page_ctrl     : 1;
+           uint8_t page_len;
+           uint8_t dcr           : 1;
+           uint8_t dte           : 1;
+           uint8_t per           : 1;
+           uint8_t rsvd1         : 1;
+           uint8_t rc            : 1;
+           uint8_t tb            : 1;
+           uint8_t arre          : 1;
+           uint8_t awre          : 1;
+           uint8_t rd_retry_cnt;
+           uint8_t correct_spin;
+           uint8_t head_offset;
+           uint8_t data_strobe_offset;
+           uint8_t emcdr         : 2;
+           uint8_t rsvd2         : 6;
+           uint8_t wr_retry_cnt;
+           uint8_t rsvd3;
+           uint16_t recovery_time_limit;
+       } __attribute__((packed));
+    } __attribute__((packed));
+} __attribute__((packed));
+
+
 
 
 struct atapi_read10_cmd {
@@ -75,6 +113,276 @@ struct atapi_read10_cmd {
 } __attribute__((packed));
 
 
+struct atapi_mode_sense_cmd {
+    uint8_t atapi_cmd;  // 0x5a
+    uint8_t rsvd1            : 3;
+    uint8_t disable_blk_desc : 1;
+    uint8_t long_lba_acc     : 1;
+    uint8_t lun              : 3;
+    uint8_t page_code        : 6;
+    uint8_t page_ctrl        : 2;
+    uint8_t sub_page_code;
+    uint8_t rsvd2[3];
+    uint16_t alloc_len;
+    uint8_t link             : 1;
+    uint8_t flag             : 1;
+    uint8_t naca             : 1;
+    uint8_t rsvd3            : 3;
+    uint8_t vendor_specific  : 2;
+} __attribute__((packed));
+
+struct atapi_mode_sense_hdr {
+    uint16_t mode_data_len;
+    uint8_t media_type_code;
+    uint8_t rsvd[2];
+    uint16_t blk_desc_len;
+} __attribute__((packed));
+
+
+struct atapi_rd_capacity_cmd {
+    uint8_t atapi_cmd;  // 0x25
+    uint8_t obsolete         : 1;
+    uint8_t rsvd1            : 4;
+    uint8_t lun              : 3;
+    uint32_t lba;
+    uint16_t rsvd2;
+    uint8_t pmi;
+    uint8_t rsvd3            : 7;
+    uint8_t link             : 1;
+    uint8_t flag             : 1;
+    uint8_t naca             : 1;
+    uint8_t rsvd4            : 3;
+    uint8_t vendor_spec      : 2;
+} __attribute__((packed));
+
+
+struct atapi_rd_capacity_resp {
+    uint32_t lba;
+    uint32_t block_len;
+} __attribute__((packed));
+
+struct atapi_config_cmd {
+    uint8_t atapi_cmd;  // 0x46
+    uint8_t rt               : 2;
+    uint8_t rsvd1            : 3;
+    uint8_t lun              : 3;
+    uint16_t start_feature_num;
+    uint8_t rsvd2[3];
+    uint16_t alloc_len;
+    uint8_t link             : 1;
+    uint8_t flag             : 1;
+    uint8_t naca             : 1;
+    uint8_t rsvd3            : 3;
+    uint8_t vendor_specific  : 2;
+} __attribute__((packed));
+
+struct atapi_config_resp {
+    uint32_t data_len;
+    uint16_t rsvd;
+    uint16_t cur_profile;
+} __attribute__((packed));
+
+
+struct atapi_rd_toc_cmd {
+    uint8_t atapi_cmd;  // 0x43
+    uint8_t rsvd1            : 1;
+    uint8_t msf              : 1;
+    uint8_t rsvd2            : 3;
+    uint8_t lun              : 3;
+    uint8_t format           : 4;
+    uint8_t rsvd3            : 4;
+    uint8_t rsvd4[3];
+    uint8_t track_num;
+    uint16_t alloc_len;
+    uint8_t link             : 1;
+    uint8_t flag             : 1;
+    uint8_t naca             : 1;
+    uint8_t rsvd5            : 3;
+    uint8_t vendor_specific  : 2;
+} __attribute__((packed));
+
+struct atapi_rd_toc_resp {
+    uint16_t data_len;
+    uint8_t first_track_num;
+    uint8_t last_track_num;
+    
+    struct {
+       uint8_t rsvd;
+       uint8_t ctrl         : 4;
+       uint8_t adr          : 4;
+       uint8_t track_num;
+       uint8_t rsvd2;
+       uint32_t start_addr;
+    } track_descs[0] __attribute__((packed)) ;
+
+} __attribute__((packed));
+
+
+struct atapi_mech_status_cmd {
+    uint8_t atapi_cmd;   // 0xbd
+    uint8_t rsvd1        : 5;
+    uint8_t lun          : 3;
+    uint8_t rsvd2[6];
+    uint16_t alloc_len;
+    uint8_t rsvd3;
+    uint8_t link             : 1;
+    uint8_t flag             : 1;
+    uint8_t naca             : 1;
+    uint8_t rsvd5            : 3;
+    uint8_t vendor_specific  : 2;
+} __attribute__((packed));
+
+struct atapi_mech_status_resp {
+    uint8_t cur_slot          : 5;
+    uint8_t changer_state     : 2;
+    uint8_t fault             : 1;
+    uint8_t rsvd1             : 4;
+    uint8_t door_open         : 1;
+    uint8_t cd_dvd_mech_state : 3;
+    uint32_t lba;
+    uint8_t num_slots         : 6;
+    uint8_t rsvd2             : 2;
+    uint16_t slot_table_len;
+} __attribute__((packed));
+
+
+struct atapi_inquiry_cmd {
+    uint8_t atapi_cmd;  // 0x12
+    uint8_t evpd           : 1; 
+    uint8_t obsolete       : 1;
+    uint8_t rsvd           : 3;
+    uint8_t lun            : 3;
+    uint8_t pg_op_code;
+    uint16_t alloc_len;
+    uint8_t link             : 1;
+    uint8_t flag             : 1;
+    uint8_t naca             : 1;
+    uint8_t rsvd5            : 3;
+    uint8_t vendor_specific  : 2;
+} __attribute__((packed));
+
+
+struct atapi_inquiry_resp {
+#define DEV_TYPE_CDROM 0x05 
+    uint8_t dev_type         : 5;
+    uint8_t rsvd1            : 3; // not used in ATAPI
+    uint8_t rsvd2            : 7;
+    uint8_t removable_media  : 1;
+    uint8_t version;
+    uint8_t resp_data_fmt    : 4;
+    uint8_t atapi_trans_ver  : 4;
+    uint8_t additional_len;
+    uint8_t protect          : 1;
+    uint8_t rsvd3            : 2;
+    uint8_t spc_3pc          : 1; // no idea
+    uint8_t tpgs             : 2;
+    uint8_t acc              : 1;
+    uint8_t sccs             : 1;
+    uint8_t addr16           : 1;
+    uint8_t addr32           : 1;
+    uint8_t ack_req_q        : 1;
+    uint8_t media_changer    : 1;
+    uint8_t multi_port       : 1;
+    uint8_t vs               : 1;
+    uint8_t enc_services     : 1;
+    uint8_t basic_queueing   : 1;
+    uint8_t rsvd4;
+    uint8_t vs2              : 1;
+    uint8_t cmd_queue        : 1;
+    uint8_t tran_dis         : 1;
+    uint8_t linked           : 1;
+    uint8_t sync             : 1;
+    uint8_t wbus_16          : 1;
+    uint8_t wbus_32          : 1;
+    uint8_t rel_addr         : 1;
+    uint8_t rsvd5;
+    uint8_t t10_vendor_id[8];
+    uint8_t product_id[16];
+    uint8_t product_rev[4];
+    /* We'll ignore these for now...
+      uint8_t vendor_specific[20];
+      uint8_t ius              : 1;
+      uint8_t qas              : 1;
+      uint8_t clocking         : 2;
+      uint8_t rsvd6            : 4;
+      uint8_t rsvd7;
+      uint16_t version_desc[8];
+    */
+} __attribute__((packed));
+
+
+
+
+
+struct atapi_cdrom_caps {
+    uint8_t page_code     : 6;
+    uint8_t rsvd          : 1;
+    uint8_t page_ctrl     : 1;
+    uint8_t page_len;
+    uint8_t cdr_rd        : 1;
+    uint8_t cdrw_rd       : 1;
+    uint8_t mthd_2        : 1;
+    uint8_t dvdrom_rd     : 1;
+    uint8_t dvdr_rd       : 1;
+    uint8_t dvdram_rd     : 1;
+    uint8_t rsvd1         : 2;
+    uint8_t cdr_wr        : 1;
+    uint8_t cdrw_wr       : 1;
+    uint8_t tst_wr        : 1;
+    uint8_t rsvd2         : 1;
+    uint8_t dvdr_wr       : 1;
+    uint8_t dvdram_wr     : 1;
+    uint8_t rsvd3         : 2;
+    uint8_t audio_play    : 1;
+    uint8_t composite     : 1;
+    uint8_t digi_port1    : 1;
+    uint8_t digi_port2    : 1;
+    uint8_t mode2_form1   : 1;
+    uint8_t mode2_form2   : 1;
+    uint8_t multisession  : 1;
+    uint8_t BUF           : 1;
+    uint8_t cd_da         : 1;
+    uint8_t cdda_str_acc  : 1;
+    uint8_t rw_supported  : 1;
+    uint8_t rw_dc         : 1;
+    uint8_t c2_ptrs_supp  : 1;
+    uint8_t isrc          : 1;
+    uint8_t upc           : 1;
+    uint8_t rd_bar_cd_cap : 1;
+    uint8_t lock          : 1;
+    uint8_t lock_state    : 1;
+    uint8_t prevent_jmpr  : 1;
+    uint8_t eject         : 1;
+    uint8_t rsvd4         : 1;
+    uint8_t lmt           : 3;
+    uint8_t sep_vol       : 1;
+    uint8_t sep_chnl_mute : 1;
+    uint8_t sdp           : 1;
+    uint8_t sss           : 1;
+    uint8_t side_chg_cap  : 1;
+    uint8_t rw_in_lead_rd : 1;
+    uint8_t rsvd5         : 2;
+    uint16_t obsolete1;
+    uint16_t num_vols_supp;
+    uint16_t lun_buf_size; // in KBytes
+    uint16_t obsolete2;
+    uint8_t obsolete3;
+    uint8_t rsvd6         : 1;
+    uint8_t bckf          : 1;
+    uint8_t rck           : 1;
+    uint8_t lsbf          : 1;
+    uint8_t len           : 2;
+    uint8_t rsvd7         : 2;
+    uint16_t obsolete4[2];
+    uint16_t cp_mgmnt_rev_supp;
+    uint8_t rsvd8;
+    uint8_t rot_ctrl_sel  : 2;
+    uint8_t rsvd9         : 6;
+    uint16_t cur_wr_spd; // KBytes/sec
+    uint16_t num_lun_wr_spd_dsc_tbls;
+    // lun write speed descriptor tables
+} __attribute__((packed));
+
 #endif
 
 #endif