⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cf.h

📁 <B>SMSC USB2.0 Flash硬盘驱动源码</B>
💻 H
字号:
/*============================================================================
  ____________________________________________________________________________
                                ______________________________________________
   SSSS  M   M          CCCC          Standard Microsystems Corporation
  S      MM MM   SSSS  C                    Austin Design Center
   SSS   M M M  S      C                 11000 N. Mopac Expressway
      S  M   M   SSS   C                Stonelake Bldg. 6, Suite 500
  SSSS   M   M      S   CCCC                Austin, Texas 78759
                SSSS            ______________________________________________
  ____________________________________________________________________________
  Copyright(C) 1999, Standard Microsystems Corporation
  All Rights Reserved.
  This program code listing is proprietary to SMSC and may not be copied,
  distributed, or used without a license to do so.  Such license may have
  Limited or Restricted Rights. Please refer to the license for further
  clarification.
  ____________________________________________________________________________
  Notice: The program contained in this listing is a proprietary trade
  secret of SMSC, Hauppauge, New York, and is copyrighted
  under the United States Copyright Act of 1976 as an unpublished work,
  pursuant to Section 104 and Section 408 of Title XVII of the United
  States code. Unauthorized copying, adaption, distribution, use, or
  display is prohibited by this law.
  ____________________________________________________________________________
  Use, duplication, or disclosure by the Government is subject to
  restrictions as set forth in subparagraph(c)(1)(ii) of the Rights
  in Technical Data and Computer Software clause at DFARS 52.227-7013.
  Contractor/Manufacturer is Standard Microsystems Corporation,
  80 Arkay Drive, Hauppauge, New York, 1178-8847.
  ____________________________________________________________________________
  ____________________________________________________________________________
  cf.h - compact flash device interface.  this function defines the interface
         thru which the flash memory controller portion of the application
         will direct messages to the compact flash device.
  ____________________________________________________________________________
  comments tbd
  ____________________________________________________________________________
  Revision History
  Date      Who  Comment
  ________  ___  _____________________________________________________________
  09/17/01  cds  initial version
  11/27/01  cds  overrode _lun_enable_mux with fmc code to enable lun data mux
                 without caller needing to know what specific device is at that
                 lun.
  01/08/02  cds  added cf_init_controller override to place the device name
                 before connecting to the USB

============================================================================*/
#ifndef __cf_dot_h__
#define __cf_dot_h__

//------------------------------------------------------------------------------
// dedicated registers
//  - defined in terms of 'ata' registers
#define t_cf_register t_ata_register
#define t_cf_register_ref t_ata_register_ref
#define at_cf(__addr)
#define at_cf_alt(__addr)
#define cf_register_rd ata_register_rd
#define cf_register_wr ata_register_wr

//-------------------------------------------------------------------------------
// Data Register (r/w -> used in conjunction with x_msb_ata/x_lsb_ata
// on the 97200-based systems
#define cf_data                      ata_data        // rw

//-------------------------------------------------------------------------------
// Error register (r)
#define cf_error                     ata_error        // r
// atapi error bits
#define kbm_cf_error_illegal_length  0x01    // Illegal length
#define kbm_cf_error_eom             0x02    // end of media detected
#define kbm_cf_error_abort           0x04    // command aborted
#define kbm_cf_error_mcr             0x08    // Media change requested
#define kbm_cf_error_sense_msk       0xF0    // Sense Key (SCSI error code)
#define kbm_cf_error_sense_no_sense  0x00
#define k_cf_error_sense_recovered_error     0x10
#define k_cf_error_sense_not_ready           0x20
#define k_cf_error_sense_medium_error        0x30
#define k_cf_error_sense_hardware_error      0x40
#define k_cf_error_sense_illegal_request     0x50
#define k_cf_error_sense_unit_attention      0x60
#define k_cf_error_sense_data_protect        0x70
#define k_cf_error_sense_aborted_command     0xb0
#define k_cf_error_sense_miscompare          0xe0
// ata error bits
#define kbm_cf_error_unc             0x40    // uncorrectable error
#define kbm_cf_error_mc              0x20    // media has changed
#define kbm_cf_error_idnf            0x10    // address not found
#define kbm_cf_error_mcr             0x08    // media change requested
#define kbm_cf_error_abrt            0x04    // command aborted
#define kbm_cf_error_nm              0x02    // no media present

//-------------------------------------------------------------------------------
#define cf_ata_features             ata_error        //  w
#define cf_sector_cnt               ata_sector_cnt   // r
#define cf_sector_num               ata_sector_num
#define cf_cylinder_lo              ata_cylinder_lo
#define cf_cylinder_hi              ata_cylinder_hi

//-------------------------------------------------------------------------------
// Device/Head Register
#define cf_dev_select               ata_device_head //  w
#define kbm_msk_cf_dev_lba_hi          0x0f         // bits 24 - 27 of lba (ata devices)
#define kbm_cf_dev_0                   0xa0     // Select master device (device 0)
#define kbm_cf_dev_1                   0xb0     // select slave device (device 1)
#define kbm_cf_dev_lba                 0x40     // use LBA addressing (ata devices)

//-------------------------------------------------------------------------------
// Device Control Register (w)
#define cf_dev_ctl                  ata_dev_ctl
#define kbm_cf_devctl_nien             0x02    // Interrupt Enable (active low)
#define kbm_cf_devctl_srst             0x04    // soft reset
#define kbm_cf_devctl_hob              0x80    // High-Order-Byte

//-------------------------------------------------------------------------------
// Status register, alternate status register (read only)
#define cf_status                     ata_status     // r
#define cf_alt_status                 ata_alt_status // r
#define kbm_cf_status_err              0x01              // r    Check error register
#define kbm_cf_status_cerr             0x04    // Correctable error
#define kbm_cf_status_drq              0x08    // Data request
#define kbm_cf_status_dsc              0x10    // Drive seek complete
#define kbm_cf_status_srv              0x10    // Service request (overlapped only)
#define kbm_cf_status_df               0x20    // drive fault
#define kbm_cf_status_drdy             0x40    // drive ready
#define kbm_cf_status_bsy              0x80    // busy

//-------------------------------------------------------------------------------
// Command register (write only)
#define    cf_command                  ata_command //  w

#if (k_log_lun_cf < k_max_log_lun)
//------------------------------------------------------------------------------
#undef _v_lun_enable_mux
#define _v_lun_enable_mux fmc_select_cfc

//-------------------------------------------------------------------------------
extern void cf_init_controller(void) reentrant;
#undef _v_lun_initialize_controller
#define _v_lun_initialize_controller cf_init_controller

//-------------------------------------------------------------------------------
extern void dfa_cf_initialize_media(void) reentrant ;
#undef _v_dfa_lun_initialize_media
#define _v_dfa_lun_initialize_media dfa_cf_initialize_media

//-------------------------------------------------------------------------------
#define _v_cf _v_ata
typedef uint8 t_cf_vtbl_ix ;
typedef enum e_cf_vtbl_entry
{
  k_cf_vtbl_sz = k_ata_vtbl_sz
} ;
extern code _vtbl_decl(cf) ;
#endif

#else
#error "warning: header included too many times!"
#endif // __cf_dot_h__

//---eof------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -