1c609719bSwdenk /* 2c609719bSwdenk * (C) Copyright 2002 3c609719bSwdenk * Rich Ireland, Enterasys Networks, rireland@enterasys.com. 4c609719bSwdenk * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6c609719bSwdenk */ 7c609719bSwdenk 8c609719bSwdenk #include <fpga.h> 9c609719bSwdenk 10c609719bSwdenk #ifndef _ALTERA_H_ 11c609719bSwdenk #define _ALTERA_H_ 12c609719bSwdenk 13d44ef7ffSMarek Vasut enum altera_iface { 14d44ef7ffSMarek Vasut /* insert all new types after this */ 15d44ef7ffSMarek Vasut min_altera_iface_type, 16d44ef7ffSMarek Vasut /* serial data and external clock */ 17d44ef7ffSMarek Vasut passive_serial, 18d44ef7ffSMarek Vasut /* parallel data */ 19d44ef7ffSMarek Vasut passive_parallel_synchronous, 20d44ef7ffSMarek Vasut /* parallel data */ 21d44ef7ffSMarek Vasut passive_parallel_asynchronous, 22d44ef7ffSMarek Vasut /* serial data w/ internal clock (not used) */ 23d44ef7ffSMarek Vasut passive_serial_asynchronous, 24d44ef7ffSMarek Vasut /* jtag/tap serial (not used ) */ 25d44ef7ffSMarek Vasut altera_jtag_mode, 26d44ef7ffSMarek Vasut /* fast passive parallel (FPP) */ 27d44ef7ffSMarek Vasut fast_passive_parallel, 28d44ef7ffSMarek Vasut /* fast passive parallel with security (FPPS) */ 29d44ef7ffSMarek Vasut fast_passive_parallel_security, 30d44ef7ffSMarek Vasut /* insert all new types before this */ 31d44ef7ffSMarek Vasut max_altera_iface_type, 32d44ef7ffSMarek Vasut }; 33c609719bSwdenk 34d44ef7ffSMarek Vasut enum altera_family { 35d44ef7ffSMarek Vasut /* insert all new types after this */ 36d44ef7ffSMarek Vasut min_altera_type, 37d44ef7ffSMarek Vasut /* ACEX1K Family */ 38d44ef7ffSMarek Vasut Altera_ACEX1K, 39d44ef7ffSMarek Vasut /* CYCLONII Family */ 40d44ef7ffSMarek Vasut Altera_CYC2, 41d44ef7ffSMarek Vasut /* StratixII Family */ 42d44ef7ffSMarek Vasut Altera_StratixII, 43*230fe9b2SPavel Machek /* SoCFPGA Family */ 44*230fe9b2SPavel Machek Altera_SoCFPGA, 45d44ef7ffSMarek Vasut 46c609719bSwdenk /* Add new models here */ 47c609719bSwdenk 48d44ef7ffSMarek Vasut /* insert all new types before this */ 49d44ef7ffSMarek Vasut max_altera_type, 50d44ef7ffSMarek Vasut }; 51d44ef7ffSMarek Vasut 52d44ef7ffSMarek Vasut typedef struct { 53d44ef7ffSMarek Vasut /* part type */ 54d44ef7ffSMarek Vasut enum altera_family family; 55d44ef7ffSMarek Vasut /* interface type */ 56d44ef7ffSMarek Vasut enum altera_iface iface; 57d44ef7ffSMarek Vasut /* bytes of data part can accept */ 58d44ef7ffSMarek Vasut size_t size; 59d44ef7ffSMarek Vasut /* interface function table */ 60d44ef7ffSMarek Vasut void *iface_fns; 61d44ef7ffSMarek Vasut /* base interface address */ 62d44ef7ffSMarek Vasut void *base; 63d44ef7ffSMarek Vasut /* implementation specific cookie */ 64d44ef7ffSMarek Vasut int cookie; 65d44ef7ffSMarek Vasut } Altera_desc; 66c609719bSwdenk 675da627a4Swdenk /* Generic Altera Functions 685da627a4Swdenk *********************************************************************/ 69e6a857daSWolfgang Denk extern int altera_load(Altera_desc *desc, const void *image, size_t size); 70e6a857daSWolfgang Denk extern int altera_dump(Altera_desc *desc, const void *buf, size_t bsize); 71c609719bSwdenk extern int altera_info(Altera_desc *desc); 725da627a4Swdenk 735da627a4Swdenk /* Board specific implementation specific function types 745da627a4Swdenk *********************************************************************/ 755da627a4Swdenk typedef int (*Altera_pre_fn)( int cookie ); 765da627a4Swdenk typedef int (*Altera_config_fn)( int assert_config, int flush, int cookie ); 775da627a4Swdenk typedef int (*Altera_status_fn)( int cookie ); 785da627a4Swdenk typedef int (*Altera_done_fn)( int cookie ); 795da627a4Swdenk typedef int (*Altera_clk_fn)( int assert_clk, int flush, int cookie ); 805da627a4Swdenk typedef int (*Altera_data_fn)( int assert_data, int flush, int cookie ); 81e6a857daSWolfgang Denk typedef int(*Altera_write_fn)(const void *buf, size_t len, int flush, int cookie); 825da627a4Swdenk typedef int (*Altera_abort_fn)( int cookie ); 835da627a4Swdenk typedef int (*Altera_post_fn)( int cookie ); 84c609719bSwdenk 853c735e74Seran liberty typedef struct { 863c735e74Seran liberty Altera_pre_fn pre; 873c735e74Seran liberty Altera_config_fn config; 883c735e74Seran liberty Altera_status_fn status; 893c735e74Seran liberty Altera_done_fn done; 903c735e74Seran liberty Altera_clk_fn clk; 913c735e74Seran liberty Altera_data_fn data; 923c735e74Seran liberty Altera_abort_fn abort; 933c735e74Seran liberty Altera_post_fn post; 943c735e74Seran liberty } altera_board_specific_func; 953c735e74Seran liberty 96*230fe9b2SPavel Machek #ifdef CONFIG_FPGA_SOCFPGA 97*230fe9b2SPavel Machek int socfpga_load(Altera_desc *desc, const void *rbf_data, size_t rbf_size); 98*230fe9b2SPavel Machek #endif 99*230fe9b2SPavel Machek 100c609719bSwdenk #endif /* _ALTERA_H_ */ 101