cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ucode_loader.c (3965B)


      1/*
      2 * Copyright (c) 2010 Broadcom Corporation
      3 *
      4 * Permission to use, copy, modify, and/or distribute this software for any
      5 * purpose with or without fee is hereby granted, provided that the above
      6 * copyright notice and this permission notice appear in all copies.
      7 *
      8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
     13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15 */
     16
     17#include <defs.h>
     18#include "types.h"
     19#include <ucode_loader.h>
     20
     21enum {
     22	D11UCODE_NAMETAG_START = 0,
     23	D11LCN0BSINITVALS24,
     24	D11LCN0INITVALS24,
     25	D11LCN1BSINITVALS24,
     26	D11LCN1INITVALS24,
     27	D11LCN2BSINITVALS24,
     28	D11LCN2INITVALS24,
     29	D11N0ABSINITVALS16,
     30	D11N0BSINITVALS16,
     31	D11N0INITVALS16,
     32	D11UCODE_OVERSIGHT16_MIMO,
     33	D11UCODE_OVERSIGHT16_MIMOSZ,
     34	D11UCODE_OVERSIGHT24_LCN,
     35	D11UCODE_OVERSIGHT24_LCNSZ,
     36	D11UCODE_OVERSIGHT_BOMMAJOR,
     37	D11UCODE_OVERSIGHT_BOMMINOR
     38};
     39
     40int brcms_ucode_data_init(struct brcms_info *wl, struct brcms_ucode *ucode)
     41{
     42	int rc;
     43
     44	rc = brcms_check_firmwares(wl);
     45
     46	rc = rc < 0 ? rc :
     47		brcms_ucode_init_buf(wl, (void **)&ucode->d11lcn0bsinitvals24,
     48				     D11LCN0BSINITVALS24);
     49	rc = rc < 0 ?
     50	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11lcn0initvals24,
     51				       D11LCN0INITVALS24);
     52	rc = rc < 0 ?
     53	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11lcn1bsinitvals24,
     54				       D11LCN1BSINITVALS24);
     55	rc = rc < 0 ?
     56	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11lcn1initvals24,
     57				       D11LCN1INITVALS24);
     58	rc = rc < 0 ? rc :
     59		brcms_ucode_init_buf(wl, (void **)&ucode->d11lcn2bsinitvals24,
     60				     D11LCN2BSINITVALS24);
     61	rc = rc < 0 ?
     62	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11lcn2initvals24,
     63				       D11LCN2INITVALS24);
     64	rc = rc < 0 ?
     65	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11n0absinitvals16,
     66				       D11N0ABSINITVALS16);
     67	rc = rc < 0 ?
     68	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11n0bsinitvals16,
     69				       D11N0BSINITVALS16);
     70	rc = rc < 0 ?
     71	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->d11n0initvals16,
     72				       D11N0INITVALS16);
     73	rc = rc < 0 ?
     74	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->bcm43xx_16_mimo,
     75				       D11UCODE_OVERSIGHT16_MIMO);
     76	rc = rc < 0 ?
     77	     rc : brcms_ucode_init_uint(wl, &ucode->bcm43xx_16_mimosz,
     78					D11UCODE_OVERSIGHT16_MIMOSZ);
     79	rc = rc < 0 ?
     80	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->bcm43xx_24_lcn,
     81				       D11UCODE_OVERSIGHT24_LCN);
     82	rc = rc < 0 ?
     83	     rc : brcms_ucode_init_uint(wl, &ucode->bcm43xx_24_lcnsz,
     84					D11UCODE_OVERSIGHT24_LCNSZ);
     85	rc = rc < 0 ?
     86	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->bcm43xx_bommajor,
     87				       D11UCODE_OVERSIGHT_BOMMAJOR);
     88	rc = rc < 0 ?
     89	     rc : brcms_ucode_init_buf(wl, (void **)&ucode->bcm43xx_bomminor,
     90				       D11UCODE_OVERSIGHT_BOMMINOR);
     91	return rc;
     92}
     93
     94void brcms_ucode_data_free(struct brcms_ucode *ucode)
     95{
     96	brcms_ucode_free_buf((void *)ucode->d11lcn0bsinitvals24);
     97	brcms_ucode_free_buf((void *)ucode->d11lcn0initvals24);
     98	brcms_ucode_free_buf((void *)ucode->d11lcn1bsinitvals24);
     99	brcms_ucode_free_buf((void *)ucode->d11lcn1initvals24);
    100	brcms_ucode_free_buf((void *)ucode->d11lcn2bsinitvals24);
    101	brcms_ucode_free_buf((void *)ucode->d11lcn2initvals24);
    102	brcms_ucode_free_buf((void *)ucode->d11n0absinitvals16);
    103	brcms_ucode_free_buf((void *)ucode->d11n0bsinitvals16);
    104	brcms_ucode_free_buf((void *)ucode->d11n0initvals16);
    105	brcms_ucode_free_buf((void *)ucode->bcm43xx_16_mimo);
    106	brcms_ucode_free_buf((void *)ucode->bcm43xx_24_lcn);
    107	brcms_ucode_free_buf((void *)ucode->bcm43xx_bommajor);
    108	brcms_ucode_free_buf((void *)ucode->bcm43xx_bomminor);
    109}