Add IDE reset to port 0xcf9. Reset IDE error register on reset of non-existent devices. Fixes IDE related issues on soft reset for ASUS boards.
65 lines
2 KiB
C
65 lines
2 KiB
C
#ifndef __IDE__
|
|
#define __IDE__
|
|
|
|
#include "device.h"
|
|
#include "timer.h"
|
|
|
|
struct IDE;
|
|
|
|
extern void writeide(int ide_board, uint16_t addr, uint8_t val);
|
|
extern void writeidew(int ide_board, uint16_t val);
|
|
extern uint8_t readide(int ide_board, uint16_t addr);
|
|
extern uint16_t readidew(int ide_board);
|
|
extern void callbackide(int ide_board);
|
|
extern void resetide(void);
|
|
extern void ide_pri_enable();
|
|
extern void ide_sec_enable();
|
|
extern void ide_pri_disable();
|
|
extern void ide_sec_disable();
|
|
extern void ide_set_bus_master(int (*read_data)(int channel, uint8_t *data, int size, void *p), int (*write_data)(int channel, uint8_t *data, int size, void *p), void (*set_irq)(int channel, void *p), void *p);
|
|
void ide_irq_raise(struct IDE *ide);
|
|
void ide_reset_devices();
|
|
|
|
extern int (*ide_bus_master_read_data)(int channel, uint8_t *data, int size, void *p);
|
|
extern int (*ide_bus_master_write_data)(int channel, uint8_t *data, int size, void *p);
|
|
extern void (*ide_bus_master_set_irq)(int channel, void *p);
|
|
extern void *ide_bus_master_p;
|
|
|
|
#include "ide_atapi.h"
|
|
|
|
extern int ideboard;
|
|
|
|
extern pc_timer_t ide_timer[2];
|
|
|
|
extern char ide_fn[7][512];
|
|
|
|
extern int cdrom_channel, zip_channel;
|
|
|
|
uint32_t atapi_get_cd_channel(int channel);
|
|
uint32_t atapi_get_cd_volume(int channel);
|
|
|
|
#define CDROM_IMAGE 200
|
|
|
|
extern device_t ide_device;
|
|
|
|
/* Bits of 'atastat' */
|
|
#define ERR_STAT 0x01
|
|
#define DRQ_STAT 0x08 /* Data request */
|
|
#define DSC_STAT 0x10
|
|
#define SERVICE_STAT 0x10
|
|
#define READY_STAT 0x40
|
|
#define BUSY_STAT 0x80
|
|
|
|
/* Bits of 'error' */
|
|
#define ABRT_ERR 0x04 /* Command aborted */
|
|
#define MCR_ERR 0x08 /* Media change request */
|
|
|
|
#define FEATURE_SET_TRANSFER_MODE 0x03
|
|
#define FEATURE_ENABLE_IRQ_OVERLAPPED 0x5d
|
|
#define FEATURE_ENABLE_IRQ_SERVICE 0x5e
|
|
#define FEATURE_DISABLE_REVERT 0x66
|
|
#define FEATURE_ENABLE_REVERT 0xcc
|
|
#define FEATURE_DISABLE_IRQ_OVERLAPPED 0xdd
|
|
#define FEATURE_DISABLE_IRQ_SERVICE 0xde
|
|
|
|
#endif //__IDE__
|