📄 cf.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 + -