1 /*
2  * $Id$
3  *
4  * Analog Devices unified Blackfin bus functions
5  *
6  * Copyright (C) 2008-2011 Analog Devices, Inc.
7  * Licensed under the GPL-2 or later.
8  */
9 
10 #ifndef __BLACKFIN_BUS_H__
11 #define __BLACKFIN_BUS_H__
12 
13 #include <sysdep.h>
14 
15 #include <stdlib.h>
16 #include <stdint.h>
17 #include <string.h>
18 
19 #include <urjtag/part.h>
20 #include <urjtag/bus.h>
21 #include <urjtag/chain.h>
22 #include <urjtag/bssignal.h>
23 
24 #include "buses.h"
25 #include "generic_bus.h"
26 
27 typedef struct {
28     const char *bus_name;
29     const char *param;
30 } bfin_bus_default_t;
31 
32 typedef struct {
33     uint32_t async_base, async_size;
34 
35     int ams_cnt, data_cnt, addr_cnt, abe_cnt;
36     urj_part_signal_t *ams[4], *data[32], *addr[32], *abe[4];
37     urj_part_signal_t *aoe, *are, *awe;
38 
39     int sdram, sms_cnt;
40     urj_part_signal_t *scas, *sras, *swe, *sms[4];
41 
42     urj_part_signal_t *hwait;
43     int hwait_level;
44 
45     void (*select_flash) (urj_bus_t *bus, uint32_t adr);
46     void (*unselect_flash) (urj_bus_t *bus);
47 } bfin_bus_params_t;
48 
49 int bfin_bus_new (urj_bus_t *bus, const urj_param_t *cmd_params[],
50                   const bfin_bus_default_t *defaults);
51 
52 int bfin_bus_area (urj_bus_t *bus, uint32_t adr, urj_bus_area_t *area);
53 
54 void bfin_select_flash (urj_bus_t *bus, uint32_t adr);
55 
56 void bfin_unselect_flash (urj_bus_t *bus);
57 
58 void bfin_setup_address (urj_bus_t *bus, uint32_t adr);
59 
60 void bfin_set_data_in (urj_bus_t *bus);
61 
62 void bfin_setup_data (urj_bus_t *bus, uint32_t data);
63 
64 int bfin_bus_read_start (urj_bus_t *bus, uint32_t adr);
65 
66 uint32_t bfin_bus_read_end (urj_bus_t *bus);
67 
68 uint32_t bfin_bus_read_next (urj_bus_t *bus, uint32_t adr);
69 
70 void bfin_bus_write (urj_bus_t *bus, uint32_t adr, uint32_t data);
71 
72 void bfin_bus_printinfo (urj_log_level_t ll, urj_bus_t *bus);
73 
74 #define _BFIN_BUS_DECLARE(board, funcs, desc) \
75 const urj_bus_driver_t urj_bus_##board##_bus = \
76 { \
77     #board, \
78     N_("Blackfin " desc " bus driver via BSR\n" \
79        "           hwait=[/]SIGNAL    Use specified SIGNAL as HWAIT"), \
80     funcs##_bus_new, \
81     urj_bus_generic_free, \
82     bfin_bus_printinfo, \
83     urj_bus_generic_prepare_extest, \
84     bfin_bus_area, \
85     bfin_bus_read_start, \
86     bfin_bus_read_next, \
87     bfin_bus_read_end, \
88     urj_bus_generic_read, \
89     urj_bus_generic_write_start, \
90     /*funcs##_bus_write,*/ bfin_bus_write, \
91     urj_bus_generic_no_init, \
92     urj_bus_generic_no_enable, \
93     urj_bus_generic_no_disable, \
94     URJ_BUS_TYPE_PARALLEL, \
95 }
96 #define BFIN_BUS_DECLARE(board, desc) _BFIN_BUS_DECLARE(board, board, desc)
97 
98 #endif
99