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