1*262f27b2SOleksandr Tymoshenko /** 2*262f27b2SOleksandr Tymoshenko * Copyright (c) 2010-2012 Broadcom. All rights reserved. 3*262f27b2SOleksandr Tymoshenko * 4*262f27b2SOleksandr Tymoshenko * Redistribution and use in source and binary forms, with or without 5*262f27b2SOleksandr Tymoshenko * modification, are permitted provided that the following conditions 6*262f27b2SOleksandr Tymoshenko * are met: 7*262f27b2SOleksandr Tymoshenko * 1. Redistributions of source code must retain the above copyright 8*262f27b2SOleksandr Tymoshenko * notice, this list of conditions, and the following disclaimer, 9*262f27b2SOleksandr Tymoshenko * without modification. 10*262f27b2SOleksandr Tymoshenko * 2. Redistributions in binary form must reproduce the above copyright 11*262f27b2SOleksandr Tymoshenko * notice, this list of conditions and the following disclaimer in the 12*262f27b2SOleksandr Tymoshenko * documentation and/or other materials provided with the distribution. 13*262f27b2SOleksandr Tymoshenko * 3. The names of the above-listed copyright holders may not be used 14*262f27b2SOleksandr Tymoshenko * to endorse or promote products derived from this software without 15*262f27b2SOleksandr Tymoshenko * specific prior written permission. 16*262f27b2SOleksandr Tymoshenko * 17*262f27b2SOleksandr Tymoshenko * ALTERNATIVELY, this software may be distributed under the terms of the 18*262f27b2SOleksandr Tymoshenko * GNU General Public License ("GPL") version 2, as published by the Free 19*262f27b2SOleksandr Tymoshenko * Software Foundation. 20*262f27b2SOleksandr Tymoshenko * 21*262f27b2SOleksandr Tymoshenko * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 22*262f27b2SOleksandr Tymoshenko * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 23*262f27b2SOleksandr Tymoshenko * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24*262f27b2SOleksandr Tymoshenko * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 25*262f27b2SOleksandr Tymoshenko * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 26*262f27b2SOleksandr Tymoshenko * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 27*262f27b2SOleksandr Tymoshenko * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 28*262f27b2SOleksandr Tymoshenko * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29*262f27b2SOleksandr Tymoshenko * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30*262f27b2SOleksandr Tymoshenko * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31*262f27b2SOleksandr Tymoshenko * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*262f27b2SOleksandr Tymoshenko */ 33*262f27b2SOleksandr Tymoshenko 34*262f27b2SOleksandr Tymoshenko #ifndef VCHI_CFG_H_ 35*262f27b2SOleksandr Tymoshenko #define VCHI_CFG_H_ 36*262f27b2SOleksandr Tymoshenko 37*262f27b2SOleksandr Tymoshenko /**************************************************************************************** 38*262f27b2SOleksandr Tymoshenko * Defines in this first section are part of the VCHI API and may be examined by VCHI 39*262f27b2SOleksandr Tymoshenko * services. 40*262f27b2SOleksandr Tymoshenko ***************************************************************************************/ 41*262f27b2SOleksandr Tymoshenko 42*262f27b2SOleksandr Tymoshenko /* Required alignment of base addresses for bulk transfer, if unaligned transfers are not enabled */ 43*262f27b2SOleksandr Tymoshenko /* Really determined by the message driver, and should be available from a run-time call. */ 44*262f27b2SOleksandr Tymoshenko #ifndef VCHI_BULK_ALIGN 45*262f27b2SOleksandr Tymoshenko # if __VCCOREVER__ >= 0x04000000 46*262f27b2SOleksandr Tymoshenko # define VCHI_BULK_ALIGN 32 // Allows for the need to do cache cleans 47*262f27b2SOleksandr Tymoshenko # else 48*262f27b2SOleksandr Tymoshenko # define VCHI_BULK_ALIGN 16 49*262f27b2SOleksandr Tymoshenko # endif 50*262f27b2SOleksandr Tymoshenko #endif 51*262f27b2SOleksandr Tymoshenko 52*262f27b2SOleksandr Tymoshenko /* Required length multiple for bulk transfers, if unaligned transfers are not enabled */ 53*262f27b2SOleksandr Tymoshenko /* May be less than or greater than VCHI_BULK_ALIGN */ 54*262f27b2SOleksandr Tymoshenko /* Really determined by the message driver, and should be available from a run-time call. */ 55*262f27b2SOleksandr Tymoshenko #ifndef VCHI_BULK_GRANULARITY 56*262f27b2SOleksandr Tymoshenko # if __VCCOREVER__ >= 0x04000000 57*262f27b2SOleksandr Tymoshenko # define VCHI_BULK_GRANULARITY 32 // Allows for the need to do cache cleans 58*262f27b2SOleksandr Tymoshenko # else 59*262f27b2SOleksandr Tymoshenko # define VCHI_BULK_GRANULARITY 16 60*262f27b2SOleksandr Tymoshenko # endif 61*262f27b2SOleksandr Tymoshenko #endif 62*262f27b2SOleksandr Tymoshenko 63*262f27b2SOleksandr Tymoshenko /* The largest possible message to be queued with vchi_msg_queue. */ 64*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_MSG_SIZE 65*262f27b2SOleksandr Tymoshenko # if defined VCHI_LOCAL_HOST_PORT 66*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_MSG_SIZE 16384 // makes file transfers fast, but should they be using bulk? 67*262f27b2SOleksandr Tymoshenko # else 68*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_MSG_SIZE 4096 // NOTE: THIS MUST BE LARGER THAN OR EQUAL TO THE SIZE OF THE KHRONOS MERGE BUFFER!! 69*262f27b2SOleksandr Tymoshenko # endif 70*262f27b2SOleksandr Tymoshenko #endif 71*262f27b2SOleksandr Tymoshenko 72*262f27b2SOleksandr Tymoshenko /****************************************************************************************** 73*262f27b2SOleksandr Tymoshenko * Defines below are system configuration options, and should not be used by VCHI services. 74*262f27b2SOleksandr Tymoshenko *****************************************************************************************/ 75*262f27b2SOleksandr Tymoshenko 76*262f27b2SOleksandr Tymoshenko /* How many connections can we support? A localhost implementation uses 2 connections, 77*262f27b2SOleksandr Tymoshenko * 1 for host-app, 1 for VMCS, and these are hooked together by a loopback MPHI VCFW 78*262f27b2SOleksandr Tymoshenko * driver. */ 79*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_NUM_CONNECTIONS 80*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_NUM_CONNECTIONS 3 81*262f27b2SOleksandr Tymoshenko #endif 82*262f27b2SOleksandr Tymoshenko 83*262f27b2SOleksandr Tymoshenko /* How many services can we open per connection? Extending this doesn't cost processing time, just a small 84*262f27b2SOleksandr Tymoshenko * amount of static memory. */ 85*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_SERVICES_PER_CONNECTION 86*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_SERVICES_PER_CONNECTION 36 87*262f27b2SOleksandr Tymoshenko #endif 88*262f27b2SOleksandr Tymoshenko 89*262f27b2SOleksandr Tymoshenko /* Adjust if using a message driver that supports more logical TX channels */ 90*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_BULK_TX_CHANNELS_PER_CONNECTION 91*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_BULK_TX_CHANNELS_PER_CONNECTION 9 // 1 MPHI + 8 CCP2 logical channels 92*262f27b2SOleksandr Tymoshenko #endif 93*262f27b2SOleksandr Tymoshenko 94*262f27b2SOleksandr Tymoshenko /* Adjust if using a message driver that supports more logical RX channels */ 95*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_BULK_RX_CHANNELS_PER_CONNECTION 96*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_BULK_RX_CHANNELS_PER_CONNECTION 1 // 1 MPHI 97*262f27b2SOleksandr Tymoshenko #endif 98*262f27b2SOleksandr Tymoshenko 99*262f27b2SOleksandr Tymoshenko /* How many receive slots do we use. This times VCHI_MAX_MSG_SIZE gives the effective 100*262f27b2SOleksandr Tymoshenko * receive queue space, less message headers. */ 101*262f27b2SOleksandr Tymoshenko #ifndef VCHI_NUM_READ_SLOTS 102*262f27b2SOleksandr Tymoshenko # if defined(VCHI_LOCAL_HOST_PORT) 103*262f27b2SOleksandr Tymoshenko # define VCHI_NUM_READ_SLOTS 4 104*262f27b2SOleksandr Tymoshenko # else 105*262f27b2SOleksandr Tymoshenko # define VCHI_NUM_READ_SLOTS 48 106*262f27b2SOleksandr Tymoshenko # endif 107*262f27b2SOleksandr Tymoshenko #endif 108*262f27b2SOleksandr Tymoshenko 109*262f27b2SOleksandr Tymoshenko /* Do we utilise overrun facility for receive message slots? Can aid peer transmit 110*262f27b2SOleksandr Tymoshenko * performance. Only define on VideoCore end, talking to host. 111*262f27b2SOleksandr Tymoshenko */ 112*262f27b2SOleksandr Tymoshenko //#define VCHI_MSG_RX_OVERRUN 113*262f27b2SOleksandr Tymoshenko 114*262f27b2SOleksandr Tymoshenko /* How many transmit slots do we use. Generally don't need many, as the hardware driver 115*262f27b2SOleksandr Tymoshenko * underneath VCHI will usually have its own buffering. */ 116*262f27b2SOleksandr Tymoshenko #ifndef VCHI_NUM_WRITE_SLOTS 117*262f27b2SOleksandr Tymoshenko # define VCHI_NUM_WRITE_SLOTS 4 118*262f27b2SOleksandr Tymoshenko #endif 119*262f27b2SOleksandr Tymoshenko 120*262f27b2SOleksandr Tymoshenko /* If a service has held or queued received messages in VCHI_XOFF_THRESHOLD or more slots, 121*262f27b2SOleksandr Tymoshenko * then it's taking up too much buffer space, and the peer service will be told to stop 122*262f27b2SOleksandr Tymoshenko * transmitting with an XOFF message. For this to be effective, the VCHI_NUM_READ_SLOTS 123*262f27b2SOleksandr Tymoshenko * needs to be considerably bigger than VCHI_NUM_WRITE_SLOTS, or the transmit latency 124*262f27b2SOleksandr Tymoshenko * is too high. */ 125*262f27b2SOleksandr Tymoshenko #ifndef VCHI_XOFF_THRESHOLD 126*262f27b2SOleksandr Tymoshenko # define VCHI_XOFF_THRESHOLD (VCHI_NUM_READ_SLOTS / 2) 127*262f27b2SOleksandr Tymoshenko #endif 128*262f27b2SOleksandr Tymoshenko 129*262f27b2SOleksandr Tymoshenko /* After we've sent an XOFF, the peer will be told to resume transmission once the local 130*262f27b2SOleksandr Tymoshenko * service has dequeued/released enough messages that it's now occupying 131*262f27b2SOleksandr Tymoshenko * VCHI_XON_THRESHOLD slots or fewer. */ 132*262f27b2SOleksandr Tymoshenko #ifndef VCHI_XON_THRESHOLD 133*262f27b2SOleksandr Tymoshenko # define VCHI_XON_THRESHOLD (VCHI_NUM_READ_SLOTS / 4) 134*262f27b2SOleksandr Tymoshenko #endif 135*262f27b2SOleksandr Tymoshenko 136*262f27b2SOleksandr Tymoshenko /* A size below which a bulk transfer omits the handshake completely and always goes 137*262f27b2SOleksandr Tymoshenko * via the message channel, if bulk auxiliary is being sent on that service. (The user 138*262f27b2SOleksandr Tymoshenko * can guarantee this by enabling unaligned transmits). 139*262f27b2SOleksandr Tymoshenko * Not API. */ 140*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MIN_BULK_SIZE 141*262f27b2SOleksandr Tymoshenko # define VCHI_MIN_BULK_SIZE ( VCHI_MAX_MSG_SIZE / 2 < 4096 ? VCHI_MAX_MSG_SIZE / 2 : 4096 ) 142*262f27b2SOleksandr Tymoshenko #endif 143*262f27b2SOleksandr Tymoshenko 144*262f27b2SOleksandr Tymoshenko /* Maximum size of bulk transmission chunks, for each interface type. A trade-off between 145*262f27b2SOleksandr Tymoshenko * speed and latency; the smaller the chunk size the better change of messages and other 146*262f27b2SOleksandr Tymoshenko * bulk transmissions getting in when big bulk transfers are happening. Set to 0 to not 147*262f27b2SOleksandr Tymoshenko * break transmissions into chunks. 148*262f27b2SOleksandr Tymoshenko */ 149*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_BULK_CHUNK_SIZE_MPHI 150*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_BULK_CHUNK_SIZE_MPHI (16 * 1024) 151*262f27b2SOleksandr Tymoshenko #endif 152*262f27b2SOleksandr Tymoshenko 153*262f27b2SOleksandr Tymoshenko /* NB Chunked CCP2 transmissions violate the letter of the CCP2 spec by using "JPEG8" mode 154*262f27b2SOleksandr Tymoshenko * with multiple-line frames. Only use if the receiver can cope. */ 155*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_BULK_CHUNK_SIZE_CCP2 156*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_BULK_CHUNK_SIZE_CCP2 0 157*262f27b2SOleksandr Tymoshenko #endif 158*262f27b2SOleksandr Tymoshenko 159*262f27b2SOleksandr Tymoshenko /* How many TX messages can we have pending in our transmit slots. Once exhausted, 160*262f27b2SOleksandr Tymoshenko * vchi_msg_queue will be blocked. */ 161*262f27b2SOleksandr Tymoshenko #ifndef VCHI_TX_MSG_QUEUE_SIZE 162*262f27b2SOleksandr Tymoshenko # define VCHI_TX_MSG_QUEUE_SIZE 256 163*262f27b2SOleksandr Tymoshenko #endif 164*262f27b2SOleksandr Tymoshenko 165*262f27b2SOleksandr Tymoshenko /* How many RX messages can we have parsed in the receive slots. Once exhausted, parsing 166*262f27b2SOleksandr Tymoshenko * will be suspended until older messages are dequeued/released. */ 167*262f27b2SOleksandr Tymoshenko #ifndef VCHI_RX_MSG_QUEUE_SIZE 168*262f27b2SOleksandr Tymoshenko # define VCHI_RX_MSG_QUEUE_SIZE 256 169*262f27b2SOleksandr Tymoshenko #endif 170*262f27b2SOleksandr Tymoshenko 171*262f27b2SOleksandr Tymoshenko /* Really should be able to cope if we run out of received message descriptors, by 172*262f27b2SOleksandr Tymoshenko * suspending parsing as the comment above says, but we don't. This sweeps the issue 173*262f27b2SOleksandr Tymoshenko * under the carpet. */ 174*262f27b2SOleksandr Tymoshenko #if VCHI_RX_MSG_QUEUE_SIZE < (VCHI_MAX_MSG_SIZE/16 + 1) * VCHI_NUM_READ_SLOTS 175*262f27b2SOleksandr Tymoshenko # undef VCHI_RX_MSG_QUEUE_SIZE 176*262f27b2SOleksandr Tymoshenko # define VCHI_RX_MSG_QUEUE_SIZE (VCHI_MAX_MSG_SIZE/16 + 1) * VCHI_NUM_READ_SLOTS 177*262f27b2SOleksandr Tymoshenko #endif 178*262f27b2SOleksandr Tymoshenko 179*262f27b2SOleksandr Tymoshenko /* How many bulk transmits can we have pending. Once exhausted, vchi_bulk_queue_transmit 180*262f27b2SOleksandr Tymoshenko * will be blocked. */ 181*262f27b2SOleksandr Tymoshenko #ifndef VCHI_TX_BULK_QUEUE_SIZE 182*262f27b2SOleksandr Tymoshenko # define VCHI_TX_BULK_QUEUE_SIZE 64 183*262f27b2SOleksandr Tymoshenko #endif 184*262f27b2SOleksandr Tymoshenko 185*262f27b2SOleksandr Tymoshenko /* How many bulk receives can we have pending. Once exhausted, vchi_bulk_queue_receive 186*262f27b2SOleksandr Tymoshenko * will be blocked. */ 187*262f27b2SOleksandr Tymoshenko #ifndef VCHI_RX_BULK_QUEUE_SIZE 188*262f27b2SOleksandr Tymoshenko # define VCHI_RX_BULK_QUEUE_SIZE 64 189*262f27b2SOleksandr Tymoshenko #endif 190*262f27b2SOleksandr Tymoshenko 191*262f27b2SOleksandr Tymoshenko /* A limit on how many outstanding bulk requests we expect the peer to give us. If 192*262f27b2SOleksandr Tymoshenko * the peer asks for more than this, VCHI will fail and assert. The number is determined 193*262f27b2SOleksandr Tymoshenko * by the peer's hardware - it's the number of outstanding requests that can be queued 194*262f27b2SOleksandr Tymoshenko * on all bulk channels. VC3's MPHI peripheral allows 16. */ 195*262f27b2SOleksandr Tymoshenko #ifndef VCHI_MAX_PEER_BULK_REQUESTS 196*262f27b2SOleksandr Tymoshenko # define VCHI_MAX_PEER_BULK_REQUESTS 32 197*262f27b2SOleksandr Tymoshenko #endif 198*262f27b2SOleksandr Tymoshenko 199*262f27b2SOleksandr Tymoshenko /* Define VCHI_CCP2TX_MANUAL_POWER if the host tells us when to turn the CCP2 200*262f27b2SOleksandr Tymoshenko * transmitter on and off. 201*262f27b2SOleksandr Tymoshenko */ 202*262f27b2SOleksandr Tymoshenko /*#define VCHI_CCP2TX_MANUAL_POWER*/ 203*262f27b2SOleksandr Tymoshenko 204*262f27b2SOleksandr Tymoshenko #ifndef VCHI_CCP2TX_MANUAL_POWER 205*262f27b2SOleksandr Tymoshenko 206*262f27b2SOleksandr Tymoshenko /* Timeout (in milliseconds) for putting the CCP2TX interface into IDLE state. Set 207*262f27b2SOleksandr Tymoshenko * negative for no IDLE. 208*262f27b2SOleksandr Tymoshenko */ 209*262f27b2SOleksandr Tymoshenko # ifndef VCHI_CCP2TX_IDLE_TIMEOUT 210*262f27b2SOleksandr Tymoshenko # define VCHI_CCP2TX_IDLE_TIMEOUT 5 211*262f27b2SOleksandr Tymoshenko # endif 212*262f27b2SOleksandr Tymoshenko 213*262f27b2SOleksandr Tymoshenko /* Timeout (in milliseconds) for putting the CCP2TX interface into OFF state. Set 214*262f27b2SOleksandr Tymoshenko * negative for no OFF. 215*262f27b2SOleksandr Tymoshenko */ 216*262f27b2SOleksandr Tymoshenko # ifndef VCHI_CCP2TX_OFF_TIMEOUT 217*262f27b2SOleksandr Tymoshenko # define VCHI_CCP2TX_OFF_TIMEOUT 1000 218*262f27b2SOleksandr Tymoshenko # endif 219*262f27b2SOleksandr Tymoshenko 220*262f27b2SOleksandr Tymoshenko #endif /* VCHI_CCP2TX_MANUAL_POWER */ 221*262f27b2SOleksandr Tymoshenko 222*262f27b2SOleksandr Tymoshenko #endif /* VCHI_CFG_H_ */ 223*262f27b2SOleksandr Tymoshenko 224*262f27b2SOleksandr Tymoshenko /****************************** End of file **********************************/ 225