summaryrefslogtreecommitdiffstats
path: root/c/src/libchip/ide/ide_ctrl_cfg.h
blob: bb27f1a0ec3eb125fab53362dcfe0eb10d932b29 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 * ide_ctrl_cfg.h
 *
 * LibChip library IDE controller header file - structuers used for 
 * configuration and plugin interface definition.
 *
 * Copyright (C) 2002 OKTET Ltd., St.-Petersburg, Russia
 * Author: Eugeny S. Mints <Eugeny.Mints@oktet.ru>
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rtems.com/license/LICENSE.
 *
 * $Id$
 */
#ifndef __IDE_CTRL_CFG_H__
#define __IDE_CTRL_CFG_H__

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/blkdev.h>

/*
 * Avaible drivers for IDE controllers
 */
typedef enum {
    IDE_STD,
    IDE_CUSTOM                /* BSP specific driver */
} ide_ctrl_devs_t;

/*
 * Each driver for a particular controller have to provide following
 * functions in such a structure. The only field which should not be NULL
 * is contInit. 
 */
typedef struct ide_ctrl_fns_s {
    boolean           (*ctrl_probe)(int minor); /* probe routine */
    void              (*ctrl_initialize)(int minor);
    int               (*ctrl_control)(int minor, uint32_t   command, 
                                      void *arg);
    /*
     * Functions which allow read/write registers of a particular controller.
     * (these functions may be used from ide_controller_read_register, 
     * ide_controller_write_register)
     */
    void    (*ctrl_reg_read)(int minor, int regist, uint16_t   *value);
    void    (*ctrl_reg_write)(int minor, int regist, uint16_t   value);
    
    /* 
     * The function allows to escape overhead for read/write register 
     * functions calls
     */
    void  (*ctrl_read_block)(int minor, uint16_t   block_size, 
                             blkdev_sg_buffer *bufs, uint32_t   *cbuf,
                             uint32_t   *pos);
    void  (*ctrl_write_block)(int minor, uint16_t   block_size,
                              blkdev_sg_buffer *bufs, uint32_t   *cbuf,
                              uint32_t   *pos);
    
    rtems_status_code (*ctrl_config_io_speed)(int minor, 
                                              uint8_t   modes_available);
} ide_ctrl_fns_t;

/* 
 * IDE Controller configuration. Table of such configurations is provided 
 * by BSP
 */
typedef struct ide_controller_bsp_table_s {
    char                *name;  /* device name */
    ide_ctrl_devs_t      type;  /* chip type */
    ide_ctrl_fns_t      *fns;   /* pointer to the set of driver routines */
    boolean              (*probe)(int minor); /* general probe routine */
    uint8_t              status; /* initialized/non initialized. Should be set 
                                  * to zero by static initialization  
                                  */
    uint32_t             port1; /* port number for the port of the device */
    rtems_boolean        int_driven; /* interrupt/poll driven */
    rtems_vector_number  int_vec; /* the interrupt vector of the device */
    void                *params;  /* contains either device specific data or a 
                                   * pointer to s device specific information 
                                   * table
                                   */
} ide_controller_bsp_table_t;

/* IDE controllers Table */
extern ide_controller_bsp_table_t    IDE_Controller_Table[];

/* Number of rows in IDE_Controller_Table */
extern unsigned long                 IDE_Controller_Count;


#define IDE_CTRL_MAX_MINOR_NUMBER   4

#define IDE_CTRL_NON_INITIALIZED    0
#define IDE_CTRL_INITIALIZED        1

#ifdef __cplusplus
}
#endif


#endif /* __IDE_CTRL_CFG_H__ */