6 * sep_dev.h - Security Processor Device Structures
8 * Copyright(c) 2009 Intel Corporation. All rights reserved.
9 * Copyright(c) 2009 Discretix. All rights reserved.
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the Free
13 * Software Foundation; either version 2 of the License, or (at your option)
16 * This program is distributed in the hope that it will be useful, but WITHOUT
17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
21 * You should have received a copy of the GNU General Public License along with
22 * this program; if not, write to the Free Software Foundation, Inc., 59
23 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 * Alan Cox alan@linux.intel.com
32 /* pointer to pci dev */
38 unsigned long io_end_bus;
39 unsigned long io_memory_size;
40 void __iomem *io_addr;
42 /* restricted access region */
46 /* shared memory region */
47 dma_addr_t shared_bus;
50 /* firmware regions */
52 unsigned long cache_size;
55 dma_addr_t resident_bus;
56 unsigned long resident_size;
59 void *rar_region_addr;
61 /* start address of the access to the SEP registers from driver */
62 void __iomem *reg_addr;
63 /* transaction counter that coordinates the transactions between SEP and HOST */
64 unsigned long send_ct;
65 /* counter for the messages from sep */
66 unsigned long reply_ct;
67 /* counter for the number of bytes allocated in the pool for the current
69 unsigned long data_pool_bytes_allocated;
71 /* array of pointers to the pages that represent input data for the synchronic
73 struct page **in_page_array;
75 /* array of pointers to the pages that represent out data for the synchronic
77 struct page **out_page_array;
79 /* number of pages in the sep_in_page_array */
80 unsigned long in_num_pages;
82 /* number of pages in the sep_out_page_array */
83 unsigned long out_num_pages;
85 /* global data for every flow */
86 struct sep_flow_context_t flows[SEP_DRIVER_NUM_FLOWS];
88 /* pointer to the workqueue that handles the flow done interrupts */
89 struct workqueue_struct *flow_wq;
91 /* address of the shared memory allocated during init for SEP driver */
93 /* the physical address of the shared area */
94 dma_addr_t shared_area_bus;
96 /* Message Shared Area start address - will be allocated during init */
97 void *message_shared_area_addr;
100 static struct sep_device *sep_dev;
102 static inline void sep_write_reg(struct sep_device *dev, int reg, u32 value)
104 void __iomem *addr = dev->reg_addr + reg;
108 static inline u32 sep_read_reg(struct sep_device *dev, int reg)
110 void __iomem *addr = dev->reg_addr + reg;
114 /* wait for SRAM write complete(indirect write */
115 static inline void sep_wait_sram_write(struct sep_device *dev)
119 reg_val = sep_read_reg(dev, HW_SRAM_DATA_READY_REG_ADDR);
120 while (!(reg_val & 1));