1 /* 2 * (C) Copyright 2002 3 * Rich Ireland, Enterasys Networks, rireland@enterasys.com. 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 #include <fpga.h> 9 10 #ifndef _ALTERA_H_ 11 #define _ALTERA_H_ 12 13 enum altera_iface { 14 /* insert all new types after this */ 15 min_altera_iface_type, 16 /* serial data and external clock */ 17 passive_serial, 18 /* parallel data */ 19 passive_parallel_synchronous, 20 /* parallel data */ 21 passive_parallel_asynchronous, 22 /* serial data w/ internal clock (not used) */ 23 passive_serial_asynchronous, 24 /* jtag/tap serial (not used ) */ 25 altera_jtag_mode, 26 /* fast passive parallel (FPP) */ 27 fast_passive_parallel, 28 /* fast passive parallel with security (FPPS) */ 29 fast_passive_parallel_security, 30 /* insert all new types before this */ 31 max_altera_iface_type, 32 }; 33 34 enum altera_family { 35 /* insert all new types after this */ 36 min_altera_type, 37 /* ACEX1K Family */ 38 Altera_ACEX1K, 39 /* CYCLONII Family */ 40 Altera_CYC2, 41 /* StratixII Family */ 42 Altera_StratixII, 43 /* SoCFPGA Family */ 44 Altera_SoCFPGA, 45 46 /* Add new models here */ 47 48 /* insert all new types before this */ 49 max_altera_type, 50 }; 51 52 typedef struct { 53 /* part type */ 54 enum altera_family family; 55 /* interface type */ 56 enum altera_iface iface; 57 /* bytes of data part can accept */ 58 size_t size; 59 /* interface function table */ 60 void *iface_fns; 61 /* base interface address */ 62 void *base; 63 /* implementation specific cookie */ 64 int cookie; 65 } Altera_desc; 66 67 /* Generic Altera Functions 68 *********************************************************************/ 69 extern int altera_load(Altera_desc *desc, const void *image, size_t size); 70 extern int altera_dump(Altera_desc *desc, const void *buf, size_t bsize); 71 extern int altera_info(Altera_desc *desc); 72 73 /* Board specific implementation specific function types 74 *********************************************************************/ 75 typedef int (*Altera_pre_fn)( int cookie ); 76 typedef int (*Altera_config_fn)( int assert_config, int flush, int cookie ); 77 typedef int (*Altera_status_fn)( int cookie ); 78 typedef int (*Altera_done_fn)( int cookie ); 79 typedef int (*Altera_clk_fn)( int assert_clk, int flush, int cookie ); 80 typedef int (*Altera_data_fn)( int assert_data, int flush, int cookie ); 81 typedef int(*Altera_write_fn)(const void *buf, size_t len, int flush, int cookie); 82 typedef int (*Altera_abort_fn)( int cookie ); 83 typedef int (*Altera_post_fn)( int cookie ); 84 85 typedef struct { 86 Altera_pre_fn pre; 87 Altera_config_fn config; 88 Altera_status_fn status; 89 Altera_done_fn done; 90 Altera_clk_fn clk; 91 Altera_data_fn data; 92 Altera_abort_fn abort; 93 Altera_post_fn post; 94 } altera_board_specific_func; 95 96 #ifdef CONFIG_FPGA_SOCFPGA 97 int socfpga_load(Altera_desc *desc, const void *rbf_data, size_t rbf_size); 98 #endif 99 100 #endif /* _ALTERA_H_ */ 101