payloads/bayou: remove unhooked payload

The bayou payload is not attached to the build system in any way, and
has not been for quite a while. Since selecting it in Kconfig does
nothing, remove this payload now that coreboot 4.10 has been released.

Change-Id: Icfb18b88e460a4e4b538b7efe907d4eef6c40638
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34565
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: ron minnich <rminnich@gmail.com>
Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
Angel Pons 2019-07-25 12:19:44 +02:00 committed by Patrick Georgi
parent d01b675067
commit 3979def529
16 changed files with 0 additions and 3181 deletions

View File

@ -40,21 +40,12 @@ config PAYLOAD_FIT
You will be able to specify the location and file name of the
payload image later.
config PAYLOAD_BAYOU
bool "Bayou"
depends on ARCH_X86
help
Select this option if you want to set bayou as your primary
payload.
source "payloads/external/*/Kconfig.name"
endchoice
source "payloads/external/*/Kconfig"
source "payloads/bayou/Kconfig"
config PAYLOAD_FILE
string "Payload path and filename"
depends on PAYLOAD_ELF || PAYLOAD_FIT

File diff suppressed because it is too large Load Diff

View File

@ -1,67 +0,0 @@
##
## This file is part of the bayou project.
##
## Copyright (C) 2008 Advanced Micro Devices, Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License version 2 as
## published by the Free Software Foundation.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
CONFIG_LZMA=y
CONFIG_NRV2B=y
CONFIG_BUILTIN_LAR=y
PBUILDER_CONFIG=bayou.xml
BUILTIN_LAR=builtin.lar
export src := $(CURDIR)
export obj := $(src)/build
LIBPAYLOAD_DIR := $(obj)/libpayload
CC?=gcc
STRIP?=strip
OBJCOPY?=objcopy
FFLAGS-y=
FFLAGS-$(CONFIG_BUILTIN_LAR) += -DCONFIG_BUILTIN_LAR
FFLAGS-$(CONFIG_LZMA) += -DCONFIG_LZMA
FFLAGS-$(CONFIG_NRV2B) += -DCONFIG_NRV2B
OBJECTS-y=main.o payload.o config.o menu.o self.o
OBJECTS-$(CONFIG_LZMA) += lzma.o
OBJECTS-$(CONFIG_NRV2B) += nrv2b.o
OBJECTS-$(CONFIG_BUILTIN_LAR) += builtin-lar.o
CFLAGS= -Wall -Werror -Os $(FFLAGS-y)
LDFLAGS=-Wl,-T,bayou.ldscript -static
LIBGCC=$(shell $(CC) -m32 -print-libgcc-file-name)
LPCC=$(LIBPAYLOAD_DIR)/bin/lpgcc
bayou.elf: $(OBJECTS-y)
$(LPCC) $(LDFLAGS) -m32 -o $@ $(OBJECTS-y)
@$(STRIP) $@
builtin-lar.o: $(BUILTIN_LAR)
@$(OBJCOPY) -I binary -B i386 -O elf32-i386 $(BUILTIN_LAR) $@
builtin.lar: util/pbuilder/pbuilder
@rm -f $@
util/pbuilder/pbuilder -c $(PBUILDER_CONFIG) create $@
util/pbuilder/pbuilder:
$(MAKE) -C util/pbuilder
%.o: %.c
$(LPCC) $(CFLAGS) -c -o $@ $<
clean:
rm -f *.o bayou.elf builtin.lar
$(MAKE) -C util/pbuilder clean

View File

@ -1,83 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef BAYOU_H_
#define BAYOU_H_
#include <libpayload.h>
#define BAYOU_MAX_ENTRIES 10
struct bpt_config {
u32 id;
u8 timeout;
u8 entries;
u8 padding[10];
};
struct bpt_pentry {
u8 index;
u8 parent;
u8 type;
u8 flags;
u8 title[64];
u8 nlen;
};
#define BPT_ID 0x30545042
#define BPT_TYPE_CHOOSER 0x01
#define BPT_TYPE_CHAIN 0x02
#define BPT_TYPE_SUBCHAIN 0x03
#define BPT_FLAG_DEFAULT 0x01
#define BPT_FLAG_NOSHOW 0x02
enum bayou_params {
BAYOU_PARAM_NAME = 0,
BAYOU_PARAM_LIST,
BAYOU_PARAM_DESC,
BAYOU_PARAMS_COUNT
};
struct payload {
struct bpt_pentry pentry;
struct larstat stat;
u8 *fptr;
char *params[BAYOU_PARAMS_COUNT];
};
struct bayoucfg {
u8 timeout;
int n_entries;
struct payload entries[BAYOU_MAX_ENTRIES];
};
extern struct bayoucfg bayoucfg;
int verify_self(u8 *ptr);
int self_get_params(u8 *fptr, u8 **params);
int self_load_and_run(struct payload *p, int *ret);
void menu(void);
void run_payload(struct payload *p);
char *payload_get_name(struct payload *p);
struct payload *payload_get_default(void);
void run_payload_timeout(struct payload *p, int timeout);
void payload_parse_params(struct payload *pload, u8 *params, int len);
int get_configuration(struct LAR *lar);
#endif

View File

@ -1,87 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
BASE_ADDRESS = 0x19000;
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386)
ENTRY(_entry)
HEAP_SIZE = 16384;
STACK_SIZE = 16384;
SECTIONS
{
. = BASE_ADDRESS;
. = ALIGN(16);
_start = .;
.text : {
*(.text._entry)
*(.text)
*(.text.*)
}
.rodata : {
*(.rodata)
*(.rodata.*)
}
.data : {
*(.data)
*(.data.*)
}
_edata = .;
.bss : {
*(.bss)
*(.bss.*)
*(COMMON)
/* Stack and heap */
. = ALIGN(16);
_heap = .;
. += HEAP_SIZE;
. = ALIGN(16);
_eheap = .;
_estack = .;
. += STACK_SIZE;
. = ALIGN(16);
_stack = .;
}
_end = .;
/DISCARD/ : { *(.comment) *(.note) *(.note.*) }
}

View File

@ -1,37 +0,0 @@
<!--
## This file is part of the bayou project.
##
## Copyright (C) 2008 Advanced Micro Devices, Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License version 2 as
## published by the Free Software Foundation.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
-->
<!-- Sample Bayou config file. Adapt as needed, then rename to bayou.xml. -->
<BayouConfig>
<global>
<timeout>10</timeout>
</global>
<payloads>
<payload type="chain" flags="default">
<title>Default Chain</title>
<chain>
<file>payloads/passwd.elf</file>
<lar>passwd</lar>
</chain>
<chain>
<file>payloads/coreinfo.elf</file>
</chain>
</payload>
<payload type="chooser">
<file>payloads/coreinfo.elf</file>
</payload>
</payloads>
</BayouConfig>

View File

@ -1,161 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "bayou.h"
struct bayoucfg bayoucfg;
static int add_payload(struct LAR *lar, struct larent *larent)
{
struct payload *payload;
int plen;
u8 *params = NULL;
u8 *fptr;
if (bayoucfg.n_entries == BAYOU_MAX_ENTRIES)
return -1;
payload = &bayoucfg.entries[bayoucfg.n_entries];
if (strncmp((char *)larent->name, "payload/", 8))
return -1;
if (larstat(lar, (const char *)larent->name, &payload->stat))
return -1;
/* Make sure the LAR entry is valid. */
if (!lfverify(lar, (const char *)larent->name))
return -1;
/* Get a pointer to the start of the file. */
fptr = larfptr(lar, (const char *)larent->name);
if (fptr == NULL)
return -1;
if (!verify_self(fptr))
return -1;
payload->pentry.index = bayoucfg.n_entries;
payload->pentry.parent = 0;
payload->pentry.type = BPT_TYPE_CHOOSER;
payload->pentry.flags = 0;
plen = self_get_params(fptr, &params);
payload_parse_params(payload, params, plen);
payload->fptr = fptr;
bayoucfg.n_entries++;
return 0;
}
static int lar_walk_files(struct LAR *lar,
int (*cb) (struct LAR *, struct larent *))
{
struct larent *larent;
int ret = 0;
rewindlar(lar);
while ((larent = readlar(lar)) != NULL) {
if ((ret = cb(lar, larent)))
break;
}
return ret;
}
/**
* If reading the bayou_payload_table fails for some reason, then construct
* a dummy table. All valid payloads in the lar are added as chooser items.
*/
static void build_dummy_table(struct LAR *lar)
{
bayoucfg.timeout = 0xFF;
bayoucfg.n_entries = 0;
lar_walk_files(lar, add_payload);
}
int get_configuration(struct LAR *lar)
{
struct larstat stat;
struct bpt_config *bptcfg;
u8 *fptr, *ptr;
int i;
/*
* If bayou_payload_table doesn't exist, then dummy up
* a table from the LAR contents.
*/
if (larstat(lar, "bayou_payload_table", &stat) ||
!lfverify(lar, "bayou_payload_table"))
build_dummy_table(lar);
/* Open up the BPT and get the creamy goodness within. */
fptr = larfptr(lar, "bayou_payload_table");
if (fptr == NULL)
build_dummy_table(lar);
bptcfg = (struct bpt_config *)fptr;
bayoucfg.timeout = bptcfg->timeout;
bayoucfg.n_entries = bptcfg->entries;
if (bayoucfg.n_entries > BAYOU_MAX_ENTRIES) {
printf("W: Limiting the number of entries to %d\n",
BAYOU_MAX_ENTRIES);
bayoucfg.n_entries = BAYOU_MAX_ENTRIES;
}
ptr = fptr + sizeof(struct bpt_config);
for (i = 0; i < bayoucfg.n_entries; i++) {
struct bpt_pentry *entry = (struct bpt_pentry *)ptr;
struct payload *p = &(bayoucfg.entries[i]);
int plen;
u8 *params = NULL;
memcpy(&p->pentry, entry, sizeof(struct bpt_pentry));
if (entry->type != BPT_TYPE_CHAIN) {
char *lname = (char *)ptr + sizeof(struct bpt_pentry);
if (larstat(lar, (const char *)lname, &p->stat))
build_dummy_table(lar);
if (!lfverify(lar, (const char *)lname))
build_dummy_table(lar);
fptr = larfptr(lar, (const char *)lname);
if (verify_self(fptr))
p->fptr = fptr;
else
build_dummy_table(lar);
plen = self_get_params(fptr, &params);
payload_parse_params(p, params, plen);
}
ptr += sizeof(struct bpt_pentry) + entry->nlen;
}
return 0;
}

View File

@ -1,43 +0,0 @@
/*
coreboot interface to memory-saving variant of LZMA decoder
(C)opyright 2006 Carl-Daniel Hailfinger
Released under the GNU GPL v2 or later
Parts of this file are based on C/7zip/Compress/LZMA_C/LzmaTest.c from the LZMA
SDK 4.42, which is written and distributed to public domain by Igor Pavlov.
*/
#include <libpayload.h>
#include "lzmadecode.c"
unsigned long ulzma(u8 *src, u8 *dst)
{
unsigned char properties[LZMA_PROPERTIES_SIZE];
UInt32 outSize;
SizeT inProcessed;
SizeT outProcessed;
int res;
CLzmaDecoderState state;
SizeT mallocneeds;
unsigned char scratchpad[15980];
memcpy(properties, src, LZMA_PROPERTIES_SIZE);
outSize = *(UInt32 *)(src + LZMA_PROPERTIES_SIZE);
if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) {
printf("Incorrect stream properties\n");
}
mallocneeds = (LzmaGetNumProbs(&state.Properties) * sizeof(CProb));
if (mallocneeds > 15980) {
printf("Decoder scratchpad too small!\n");
}
state.Probs = (CProb *)scratchpad;
res = LzmaDecode(&state, src + LZMA_PROPERTIES_SIZE + 8, (SizeT)0xffffffff, &inProcessed,
dst, outSize, &outProcessed);
if (res != 0) {
printf("Decoding error = %d\n", res);
}
return outSize;
}

View File

@ -1,398 +0,0 @@
/*
LzmaDecode.c
LZMA Decoder (optimized for Speed version)
LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
http://www.7-zip.org/
LZMA SDK is licensed under two licenses:
1) GNU Lesser General Public License (GNU LGPL)
2) Common Public License (CPL)
It means that you can select one of these two licenses and
follow rules of that license.
SPECIAL EXCEPTION:
Igor Pavlov, as the author of this Code, expressly permits you to
statically or dynamically link your Code (or bind by name) to the
interfaces of this file without subjecting your linked Code to the
terms of the CPL or GNU LGPL. Any modifications or additions
to this file, however, are subject to the LGPL or CPL terms.
*/
#include "lzmadecode.h"
#define kNumTopBits 24
#define kTopValue ((UInt32)1 << kNumTopBits)
#define kNumBitModelTotalBits 11
#define kBitModelTotal (1 << kNumBitModelTotalBits)
#define kNumMoveBits 5
#define RC_READ_BYTE (*Buffer++)
#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \
{ int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }}
#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; }
#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2
#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; }
#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound)
#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits;
#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits;
#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \
{ UpdateBit0(p); mi <<= 1; A0; } else \
{ UpdateBit1(p); mi = (mi + mi) + 1; A1; }
#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;)
#define RangeDecoderBitTreeDecode(probs, numLevels, res) \
{ int i = numLevels; res = 1; \
do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \
res -= (1 << numLevels); }
#define kNumPosBitsMax 4
#define kNumPosStatesMax (1 << kNumPosBitsMax)
#define kLenNumLowBits 3
#define kLenNumLowSymbols (1 << kLenNumLowBits)
#define kLenNumMidBits 3
#define kLenNumMidSymbols (1 << kLenNumMidBits)
#define kLenNumHighBits 8
#define kLenNumHighSymbols (1 << kLenNumHighBits)
#define LenChoice 0
#define LenChoice2 (LenChoice + 1)
#define LenLow (LenChoice2 + 1)
#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
#define kNumStates 12
#define kNumLitStates 7
#define kStartPosModelIndex 4
#define kEndPosModelIndex 14
#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
#define kNumPosSlotBits 6
#define kNumLenToPosStates 4
#define kNumAlignBits 4
#define kAlignTableSize (1 << kNumAlignBits)
#define kMatchMinLen 2
#define IsMatch 0
#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
#define IsRepG0 (IsRep + kNumStates)
#define IsRepG1 (IsRepG0 + kNumStates)
#define IsRepG2 (IsRepG1 + kNumStates)
#define IsRep0Long (IsRepG2 + kNumStates)
#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
#define LenCoder (Align + kAlignTableSize)
#define RepLenCoder (LenCoder + kNumLenProbs)
#define Literal (RepLenCoder + kNumLenProbs)
#if Literal != LZMA_BASE_SIZE
StopCompilingDueBUG
#endif
int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size)
{
unsigned char prop0;
if (size < LZMA_PROPERTIES_SIZE)
return LZMA_RESULT_DATA_ERROR;
prop0 = propsData[0];
if (prop0 >= (9 * 5 * 5))
return LZMA_RESULT_DATA_ERROR;
{
for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5));
for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9);
propsRes->lc = prop0;
/*
unsigned char remainder = (unsigned char)(prop0 / 9);
propsRes->lc = prop0 % 9;
propsRes->pb = remainder / 5;
propsRes->lp = remainder % 5;
*/
}
return LZMA_RESULT_OK;
}
#define kLzmaStreamWasFinishedId (-1)
int LzmaDecode(CLzmaDecoderState *vs,
const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed)
{
CProb *p = vs->Probs;
SizeT nowPos = 0;
Byte previousByte = 0;
UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1;
UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1;
int lc = vs->Properties.lc;
int state = 0;
UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
int len = 0;
const Byte *Buffer;
const Byte *BufferLim;
UInt32 Range;
UInt32 Code;
*inSizeProcessed = 0;
*outSizeProcessed = 0;
{
UInt32 i;
UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
for (i = 0; i < numProbs; i++)
p[i] = kBitModelTotal >> 1;
}
RC_INIT(inStream, inSize);
while(nowPos < outSize)
{
CProb *prob;
UInt32 bound;
int posState = (int)(
(nowPos
)
& posStateMask);
prob = p + IsMatch + (state << kNumPosBitsMax) + posState;
IfBit0(prob)
{
int symbol = 1;
UpdateBit0(prob)
prob = p + Literal + (LZMA_LIT_SIZE *
(((
(nowPos
)
& literalPosMask) << lc) + (previousByte >> (8 - lc))));
if (state >= kNumLitStates)
{
int matchByte;
matchByte = outStream[nowPos - rep0];
do
{
int bit;
CProb *probLit;
matchByte <<= 1;
bit = (matchByte & 0x100);
probLit = prob + 0x100 + bit + symbol;
RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break)
}
while (symbol < 0x100);
}
while (symbol < 0x100)
{
CProb *probLit = prob + symbol;
RC_GET_BIT(probLit, symbol)
}
previousByte = (Byte)symbol;
outStream[nowPos++] = previousByte;
if (state < 4) state = 0;
else if (state < 10) state -= 3;
else state -= 6;
}
else
{
UpdateBit1(prob);
prob = p + IsRep + state;
IfBit0(prob)
{
UpdateBit0(prob);
rep3 = rep2;
rep2 = rep1;
rep1 = rep0;
state = state < kNumLitStates ? 0 : 3;
prob = p + LenCoder;
}
else
{
UpdateBit1(prob);
prob = p + IsRepG0 + state;
IfBit0(prob)
{
UpdateBit0(prob);
prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState;
IfBit0(prob)
{
UpdateBit0(prob);
if (nowPos == 0)
return LZMA_RESULT_DATA_ERROR;
state = state < kNumLitStates ? 9 : 11;
previousByte = outStream[nowPos - rep0];
outStream[nowPos++] = previousByte;
continue;
}
else
{
UpdateBit1(prob);
}
}
else
{
UInt32 distance;
UpdateBit1(prob);
prob = p + IsRepG1 + state;
IfBit0(prob)
{
UpdateBit0(prob);
distance = rep1;
}
else
{
UpdateBit1(prob);
prob = p + IsRepG2 + state;
IfBit0(prob)
{
UpdateBit0(prob);
distance = rep2;
}
else
{
UpdateBit1(prob);
distance = rep3;
rep3 = rep2;
}
rep2 = rep1;
}
rep1 = rep0;
rep0 = distance;
}
state = state < kNumLitStates ? 8 : 11;
prob = p + RepLenCoder;
}
{
int numBits, offset;
CProb *probLen = prob + LenChoice;
IfBit0(probLen)
{
UpdateBit0(probLen);
probLen = prob + LenLow + (posState << kLenNumLowBits);
offset = 0;
numBits = kLenNumLowBits;
}
else
{
UpdateBit1(probLen);
probLen = prob + LenChoice2;
IfBit0(probLen)
{
UpdateBit0(probLen);
probLen = prob + LenMid + (posState << kLenNumMidBits);
offset = kLenNumLowSymbols;
numBits = kLenNumMidBits;
}
else
{
UpdateBit1(probLen);
probLen = prob + LenHigh;
offset = kLenNumLowSymbols + kLenNumMidSymbols;
numBits = kLenNumHighBits;
}
}
RangeDecoderBitTreeDecode(probLen, numBits, len);
len += offset;
}
if (state < 4)
{
int posSlot;
state += kNumLitStates;
prob = p + PosSlot +
((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
kNumPosSlotBits);
RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot);
if (posSlot >= kStartPosModelIndex)
{
int numDirectBits = ((posSlot >> 1) - 1);
rep0 = (2 | ((UInt32)posSlot & 1));
if (posSlot < kEndPosModelIndex)
{
rep0 <<= numDirectBits;
prob = p + SpecPos + rep0 - posSlot - 1;
}
else
{
numDirectBits -= kNumAlignBits;
do
{
RC_NORMALIZE
Range >>= 1;
rep0 <<= 1;
if (Code >= Range)
{
Code -= Range;
rep0 |= 1;
}
}
while (--numDirectBits != 0);
prob = p + Align;
rep0 <<= kNumAlignBits;
numDirectBits = kNumAlignBits;
}
{
int i = 1;
int mi = 1;
do
{
CProb *prob3 = prob + mi;
RC_GET_BIT2(prob3, mi, ; , rep0 |= i);
i <<= 1;
}
while(--numDirectBits != 0);
}
}
else
rep0 = posSlot;
if (++rep0 == (UInt32)(0))
{
/* it's for stream version */
len = kLzmaStreamWasFinishedId;
break;
}
}
len += kMatchMinLen;
if (rep0 > nowPos)
return LZMA_RESULT_DATA_ERROR;
do
{
previousByte = outStream[nowPos - rep0];
len--;
outStream[nowPos++] = previousByte;
}
while(len != 0 && nowPos < outSize);
}
}
RC_NORMALIZE;
*inSizeProcessed = (SizeT)(Buffer - inStream);
*outSizeProcessed = nowPos;
return LZMA_RESULT_OK;
}

View File

@ -1,67 +0,0 @@
/*
LzmaDecode.h
LZMA Decoder interface
LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
http://www.7-zip.org/
LZMA SDK is licensed under two licenses:
1) GNU Lesser General Public License (GNU LGPL)
2) Common Public License (CPL)
It means that you can select one of these two licenses and
follow rules of that license.
SPECIAL EXCEPTION:
Igor Pavlov, as the author of this code, expressly permits you to
statically or dynamically link your code (or bind by name) to the
interfaces of this file without subjecting your linked code to the
terms of the CPL or GNU LGPL. Any modifications or additions
to this file, however, are subject to the LGPL or CPL terms.
*/
#ifndef LZMADECODE_H
#define LZMADECODE_H
typedef unsigned char Byte;
typedef unsigned short UInt16;
typedef unsigned int UInt32;
typedef UInt32 SizeT;
#define CProb UInt16
#define LZMA_RESULT_OK 0
#define LZMA_RESULT_DATA_ERROR 1
#define LZMA_BASE_SIZE 1846
#define LZMA_LIT_SIZE 768
#define LZMA_PROPERTIES_SIZE 5
typedef struct _CLzmaProperties
{
int lc;
int lp;
int pb;
}CLzmaProperties;
int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);
#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp)))
#define kLzmaNeedInitId (-2)
typedef struct _CLzmaDecoderState
{
CLzmaProperties Properties;
CProb *Probs;
} CLzmaDecoderState;
int LzmaDecode(CLzmaDecoderState *vs,
const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
#endif /* LZMADECODE_H */

View File

@ -1,66 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "bayou.h"
static void print_banner(void)
{
printf("\e[H\e[JBayou Payload Chooser v0.3\n");
}
int main(void)
{
extern unsigned long _binary_builtin_lar_start;
struct LAR *lar;
print_banner();
lar = openlar((void *)&_binary_builtin_lar_start);
if (lar == NULL) {
printf("[CHOOSER]: Unable to scan the attached LAR file\n");
return -1;
}
get_configuration(lar);
if (bayoucfg.n_entries == 0) {
printf("[CHOOSER]: No payloads were found in the LAR\n");
return -1;
}
/*
* If timeout == 0xFF, then show the menu immediately.
* If timeout is zero, then find and run the default item immediately.
* If there is no default item, then show the menu.
* If timeout is anything else, then show a message and wait for a
* keystroke. If there is no keystroke in time then run the default.
* If there is no default then show the menu.
*/
if (bayoucfg.timeout != 0xFF) {
struct payload *d = payload_get_default();
if (d != NULL) {
if (bayoucfg.timeout == 0)
run_payload(d);
else
run_payload_timeout(d, bayoucfg.timeout);
}
}
menu();
return 0;
}

View File

@ -1,152 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <libpayload.h>
#include <curses.h>
#include "bayou.h"
#define SCREEN_X 80
#define SCREEN_Y 25
static int menu_width = 0;
static struct payload *mpayloads[BAYOU_MAX_ENTRIES];
static int m_entries = 0;
static unsigned int selected = 0;
static WINDOW *menuwin, *status;
void create_menu(void)
{
int i;
for (i = 0; i < bayoucfg.n_entries; i++) {
struct payload *p = &(bayoucfg.entries[i]);
char *name;
if ((p->pentry.parent != 0) ||
(p->pentry.flags & BPT_FLAG_NOSHOW))
continue;
mpayloads[m_entries++] = p;
name = payload_get_name(p);
if (strlen(name) > menu_width)
menu_width = strlen(name);
}
menu_width += 4;
if (menu_width < 30)
menu_width = 30;
menuwin = newwin(m_entries + 3, menu_width,
(SCREEN_Y - (m_entries + 3)) / 2,
(SCREEN_X - menu_width) / 2);
}
void draw_menu(void)
{
struct payload *s;
int i;
wattrset(menuwin, COLOR_PAIR(3));
wclear(menuwin);
wborder(menuwin, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE,
ACS_ULCORNER, ACS_URCORNER, ACS_LLCORNER, ACS_LRCORNER);
wattrset(menuwin, COLOR_PAIR(4) | A_BOLD);
mvwprintw(menuwin, 0, (menu_width - 17) / 2, " Payload Chooser ");
wattrset(menuwin, COLOR_PAIR(3));
for (i = 0; i < m_entries; i++) {
char *name = payload_get_name(mpayloads[i]);
int col = (menu_width - (2 + strlen(name))) / 2;
if (i == selected)
wattrset(menuwin, COLOR_PAIR(5) | A_BOLD);
else
wattrset(menuwin, COLOR_PAIR(3));
mvwprintw(menuwin, 2 + i, col, name);
}
s = mpayloads[selected];
wclear(status);
if (s->params[BAYOU_PARAM_DESC] != NULL) {
char buf[66];
int len = strnlen(s->params[BAYOU_PARAM_DESC], 65);
snprintf(buf, 65, s->params[BAYOU_PARAM_DESC]);
buf[65] = 0;
mvwprintw(status, 0, (80 - len) / 2, buf);
}
wrefresh(menuwin);
wrefresh(status);
}
void loop(void)
{
int key;
while (1) {
key = getch();
if (key == ERR)
continue;
if (key == KEY_DOWN)
selected = (selected + 1) % m_entries;
else if (key == KEY_UP)
selected = (selected - 1) % m_entries;
else if (key == KEY_ENTER) {
run_payload(mpayloads[selected]);
clear();
refresh();
} else
continue;
draw_menu();
}
}
void menu(void)
{
initscr();
init_pair(1, COLOR_WHITE, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_WHITE);
init_pair(3, COLOR_BLACK, COLOR_WHITE);
init_pair(4, COLOR_CYAN, COLOR_WHITE);
init_pair(5, COLOR_WHITE, COLOR_RED);
wattrset(stdscr, COLOR_PAIR(1));
wclear(stdscr);
status = newwin(1, 80, 24, 0);
wattrset(status, COLOR_PAIR(2));
wclear(status);
refresh();
create_menu();
draw_menu();
loop();
}

View File

@ -1,86 +0,0 @@
#include <libpayload.h>
// This GETBIT is supposed to work on little endian
// 32bit systems. The algorithm will definitely need
// some fixing on other systems, but it might not be
// a problem since the nrv2b binary behaves the same..
#ifndef ENDIAN
#define ENDIAN 0
#endif
#ifndef BITSIZE
#define BITSIZE 32
#endif
#define GETBIT_8(bb, src, ilen) \
(((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1)
#define GETBIT_LE16(bb, src, ilen) \
(bb*=2,bb&0xffff ? (bb>>16)&1 : (ilen+=2,((bb=(src[ilen-2]+src[ilen-1]*256u)*2+1)>>16)&1))
#define GETBIT_LE32(bb, src, ilen) \
(bc > 0 ? ((bb>>--bc)&1) : (bc=31,\
bb=*(const u32 *)((src)+ilen),ilen+=4,(bb>>31)&1))
#if ENDIAN == 0 && BITSIZE == 8
#define GETBIT(bb, src, ilen) GETBIT_8(bb, src, ilen)
#endif
#if ENDIAN == 0 && BITSIZE == 16
#define GETBIT(bb, src, ilen) GETBIT_LE16(bb, src, ilen)
#endif
#if ENDIAN == 0 && BITSIZE == 32
#define GETBIT(bb, src, ilen) GETBIT_LE32(bb, src, ilen)
#endif
unsigned long unrv2b(u8 *src, u8 *dst, unsigned long *ilen_p)
{
unsigned long ilen = 0, olen = 0, last_m_off = 1;
u32 bb = 0;
unsigned bc = 0;
const u8 *m_pos;
// skip length
src += 4;
/* FIXME: check olen with the length stored in first 4 bytes */
for (;;) {
unsigned int m_off, m_len;
while (GETBIT(bb, src, ilen)) {
dst[olen++] = src[ilen++];
}
m_off = 1;
do {
m_off = m_off * 2 + GETBIT(bb, src, ilen);
} while (!GETBIT(bb, src, ilen));
if (m_off == 2) {
m_off = last_m_off;
} else {
m_off = (m_off - 3) * 256 + src[ilen++];
if (m_off == 0xffffffffU)
break;
last_m_off = ++m_off;
}
m_len = GETBIT(bb, src, ilen);
m_len = m_len * 2 + GETBIT(bb, src, ilen);
if (m_len == 0) {
m_len++;
do {
m_len = m_len * 2 + GETBIT(bb, src, ilen);
} while (!GETBIT(bb, src, ilen));
m_len += 2;
}
m_len += (m_off > 0xd00);
m_pos = dst + olen - m_off;
dst[olen++] = *m_pos++;
do {
dst[olen++] = *m_pos++;
} while (--m_len > 0);
}
*ilen_p = ilen;
return olen;
}

View File

@ -1,107 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "bayou.h"
#define TIMEOUT_MESSAGE "Press ESC for the menu (%2d)...\r"
#define TIMEOUT_KEY '\033'
void run_payload(struct payload *p)
{
int ret, i;
/* For chooser entries, just run the payload. */
if (p->pentry.type == BPT_TYPE_CHOOSER) {
self_load_and_run(p, &ret);
return;
}
/* For chained entries, run all the sub-chain items. */
for (i = 0; i < bayoucfg.n_entries; i++) {
struct payload *s = &(bayoucfg.entries[i]);
if (s->pentry.parent == p->pentry.index)
self_load_and_run(s, &ret);
}
}
char *payload_get_name(struct payload *p)
{
if (p->pentry.type == BPT_TYPE_CHAIN)
return (char *)p->pentry.title;
else if (p->pentry.type == BPT_TYPE_CHOOSER) {
if (p->pentry.title[0] != 0)
return (char *)p->pentry.title;
return p->params[BAYOU_PARAM_DESC];
}
return NULL;
}
struct payload *payload_get_default(void)
{
int i;
for (i = 0; i < bayoucfg.n_entries; i++) {
struct payload *s = &(bayoucfg.entries[i]);
if (s->pentry.parent == 0 && s->pentry.flags & BPT_FLAG_DEFAULT)
return s;
}
return NULL;
}
void run_payload_timeout(struct payload *p, int timeout)
{
int t, ch, tval;
for (t = timeout; t >= 0; t--) {
printf(TIMEOUT_MESSAGE, t);
tval = 1000;
ch = getchar_timeout(&tval);
if (ch == TIMEOUT_KEY)
return;
}
run_payload(p);
}
void payload_parse_params(struct payload *pload, u8 *params, int len)
{
char *ptr = (char *)params;
int i = 0;
if (ptr == NULL)
return;
while (ptr < ((char *)params + len)) {
if (!strncmp(ptr, "name=", 5)) {
pload->params[BAYOU_PARAM_NAME] = ptr + 5;
} else if (!strncmp(ptr, "desc=", 5)) {
pload->params[BAYOU_PARAM_DESC] = ptr + 5;
} else if (!strncmp(ptr, "listname=", 9)) {
pload->params[BAYOU_PARAM_LIST] = ptr + 9;
}
ptr += strnlen(ptr, len - i);
if (ptr < ((char *)params + len) && *ptr == 0)
ptr++;
}
}

View File

@ -1,143 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "bayou.h"
#include "self.h"
static int nop_decompress(void *dst, void *src, int len)
{
memcpy(dst, src, len);
return len;
}
#ifdef CONFIG_LZMA
extern int ulzma(u8 *, u8 *);
static int lzma_decompress(void *dst, void *src, int len)
{
return ulzma((u8 *) src, (u8 *) dst);
}
#endif
#ifdef CONFIG_NRV2B
extern int unrv2b(u8 *, u8 *, unsigned long *);
static int nrv2b_decompress(void *dst, void *src, int len)
{
unsigned long l = (u32) len;
return unrv2b(src, dst, &l);
}
#endif
static int zeros_decompress(void *dst, void *src, int len)
{
memset(dst, 0, len);
return len;
}
int self_get_params(u8 *fptr, u8 **params)
{
struct self_segment *seg = (struct self_segment *)fptr;
while (seg->type != SELF_TYPE_ENTRY) {
if (seg->type == 0)
return -1;
if (seg->type == SELF_TYPE_PARAMS) {
*params = (u8 *) (fptr + seg->offset);
return seg->len;
}
seg++;
}
*params = NULL;
return 0;
}
int verify_self(u8 *ptr)
{
struct self_segment *seg = (struct self_segment *)ptr;
switch (seg->type) {
case SELF_TYPE_CODE:
case SELF_TYPE_DATA:
case SELF_TYPE_BSS:
case SELF_TYPE_PARAMS:
case SELF_TYPE_ENTRY:
return 1;
}
return 0;
}
int self_load_and_run(struct payload *p, int *ret)
{
struct self_segment *seg = (struct self_segment *)p->fptr;
int (*dcmp) (void *, void *, int);
int dlen;
switch (p->stat.compression) {
#ifdef CONFIG_LZMA
case ALGO_LZMA:
dcmp = lzma_decompress;
break;
#endif
#ifdef CONFIG_NRV2B
case ALGO_NRV2B:
dcmp = nrv2b_decompress;
break;
#endif
case ALGO_ZEROES:
dcmp = zeros_decompress;
break;
case ALGO_NONE:
dcmp = nop_decompress;
default:
printf("E: Unsupported decompression type\n");
return -1;
}
while (1) {
u32 laddr = (u32) (seg->load_addr & 0xFFFFFFFF);
switch (seg->type) {
case SELF_TYPE_CODE:
case SELF_TYPE_DATA:
dlen = dcmp((void *)laddr,
(void *)p->fptr + seg->offset, seg->len);
if (dlen < seg->mem_len) {
memset((void *)(laddr + dlen), 0,
seg->mem_len - dlen);
}
break;
case SELF_TYPE_BSS:
memset((void *)laddr, 0, seg->len);
break;
case SELF_TYPE_ENTRY:
*ret = exec(laddr, 0, NULL);
return 0;
default:
break;
}
seg++;
}
return -1;
}

View File

@ -1,40 +0,0 @@
/*
* This file is part of the bayou project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef SELF_H_
#define SELF_H_
#include <libpayload.h>
struct self_segment {
u32 type;
u32 offset;
u64 load_addr;
u32 len;
u32 mem_len;
};
struct self {
struct larstat stat;
void *fptr;
};
#define SELF_TYPE_CODE 0x45444F43
#define SELF_TYPE_DATA 0x41544144
#define SELF_TYPE_BSS 0x20535342
#define SELF_TYPE_PARAMS 0x41524150
#define SELF_TYPE_ENTRY 0x52544E45
#endif