mirror of
https://salsa.debian.org/gnuk-team/gnuk/gnuk.git
synced 2024-09-20 02:40:08 +00:00
fixes for pin-cir support
This commit is contained in:
parent
95587b8cae
commit
95eb208d71
10
ChangeLog
10
ChangeLog
@ -1,5 +1,15 @@
|
||||
2013-11-02 Niibe Yutaka <gniibe@fsij.org>
|
||||
|
||||
* chopstx: Update.
|
||||
* src/configure (TIM_SIZE, EXT_SIZE): New.
|
||||
* src/gnuk.ld.in (__process6_stack_size__)
|
||||
(__process7_stack_size__): New.
|
||||
* src/main.c (main): Call cir_init.
|
||||
* src/openpgp.c (openpgp_card_thread): Rename from GPGthread.
|
||||
* src/usb-icc.c (icc_power_on): Follow the change.
|
||||
|
||||
2013-11-01 Niibe Yutaka <gniibe@fsij.org>
|
||||
|
||||
* src/sys.c: Update from Chopstx.
|
||||
* src/usb_lld.h: Remove interrupt definition.
|
||||
* src/stm32f103.h: Add AFIO, EXTI, and TIMER constants.
|
||||
|
2
chopstx
2
chopstx
@ -1 +1 @@
|
||||
Subproject commit 5f14824977c1b7f281aa0b31cc8dbf93a649b504
|
||||
Subproject commit 9fe6cefdc0564b6bb3d938c0c1074d57a4b9500f
|
7
src/configure
vendored
7
src/configure
vendored
@ -167,6 +167,8 @@ fi
|
||||
|
||||
# --enable-pinpad option
|
||||
MSC_SIZE="0"
|
||||
TIM_SIZE="0"
|
||||
EXT_SIZE="0"
|
||||
if test "$pinpad" = "no"; then
|
||||
PINPAD_MAKE_OPTION="# ENABLE_PINPAD="
|
||||
PINPAD_DEFINE="#undef PINPAD_SUPPORT"
|
||||
@ -179,6 +181,9 @@ else
|
||||
echo "PIN pad option enabled ($pinpad)"
|
||||
if test "$pinpad" = "dnd"; then
|
||||
MSC_SIZE="0x0200"
|
||||
elif test "$pinpad" = "cir"; then
|
||||
TIM_SIZE="0x00c0"
|
||||
EXT_SIZE="0x00c0"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -291,6 +296,8 @@ else
|
||||
-e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
|
||||
-e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
|
||||
-e "s/@MSC_SIZE@/$MSC_SIZE/" \
|
||||
-e "s/@TIM_SIZE@/$TIM_SIZE/" \
|
||||
-e "s/@EXT_SIZE@/$EXT_SIZE/" \
|
||||
< gnuk.ld.in > gnuk.ld
|
||||
fi
|
||||
sed -e "s/@DEBUG_DEFINE@/$DEBUG_DEFINE/" \
|
||||
|
29
src/gnuk.h
29
src/gnuk.h
@ -18,14 +18,14 @@ struct apdu {
|
||||
|
||||
extern struct apdu apdu;
|
||||
|
||||
#define EV_EXEC_FINISHED ((eventmask_t)2) /* GPG Execution finished */
|
||||
#define EV_EXEC_FINISHED (2) /* OpenPGPcard Execution finished */
|
||||
|
||||
/* GPG thread */
|
||||
#define EV_PINPAD_INPUT_DONE ((eventmask_t)1)
|
||||
#define EV_EXIT ((eventmask_t)2)
|
||||
#define EV_CMD_AVAILABLE ((eventmask_t)4)
|
||||
#define EV_VERIFY_CMD_AVAILABLE ((eventmask_t)8)
|
||||
#define EV_MODIFY_CMD_AVAILABLE ((eventmask_t)16)
|
||||
/* OpenPGPcard thread */
|
||||
#define EV_PINPAD_INPUT_DONE (1)
|
||||
#define EV_EXIT (2)
|
||||
#define EV_CMD_AVAILABLE (4)
|
||||
#define EV_VERIFY_CMD_AVAILABLE (8)
|
||||
#define EV_MODIFY_CMD_AVAILABLE (16)
|
||||
|
||||
/* Maximum cmd apdu data is key import 22+4+128+128 (proc_key_import) */
|
||||
#define MAX_CMD_APDU_DATA_SIZE (22+4+128+128) /* without header */
|
||||
@ -353,18 +353,17 @@ extern void flash_do_write_internal (const uint8_t *p, int nr, const uint8_t *da
|
||||
|
||||
extern const uint8_t gnukStringSerial[];
|
||||
|
||||
#define LED_ONESHOT ((eventmask_t)1)
|
||||
#define LED_TWOSHOTS ((eventmask_t)2)
|
||||
#define LED_SHOW_STATUS ((eventmask_t)4)
|
||||
#define LED_START_COMMAND ((eventmask_t)8)
|
||||
#define LED_FINISH_COMMAND ((eventmask_t)16)
|
||||
#define LED_FATAL ((eventmask_t)32)
|
||||
#define LED_ONESHOT (1)
|
||||
#define LED_TWOSHOTS (2)
|
||||
#define LED_SHOW_STATUS (4)
|
||||
#define LED_START_COMMAND (8)
|
||||
#define LED_FINISH_COMMAND (16)
|
||||
#define LED_FATAL (32)
|
||||
extern void led_blink (int spec);
|
||||
|
||||
#if defined(PINPAD_SUPPORT)
|
||||
# if defined(PINPAD_CIR_SUPPORT)
|
||||
extern void cir_ext_disable (void);
|
||||
extern void cir_ext_enable (void);
|
||||
extern void cir_init (void);
|
||||
# elif defined(PINPAD_DIAL_SUPPORT)
|
||||
extern void dial_sw_disable (void);
|
||||
extern void dial_sw_enable (void);
|
||||
|
@ -7,7 +7,9 @@ __process1_stack_size__ = 0x0140; /* ccid */
|
||||
__process2_stack_size__ = 0x0180; /* rng */
|
||||
__process3_stack_size__ = 0x0b00; /* gpg */
|
||||
__process4_stack_size__ = 0x0100; /* intr: usb */
|
||||
__process5_stack_size__ = @MSC_SIZE@; /* msc */
|
||||
__process5_stack_size__ = @MSC_SIZE@; /* msc */
|
||||
__process6_stack_size__ = @TIM_SIZE@; /* intr: timer */
|
||||
__process7_stack_size__ = @EXT_SIZE@; /* intr: ext */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
@ -112,6 +114,14 @@ SECTIONS
|
||||
. += __process5_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process5_stack_end__ = .;
|
||||
__process6_stack_base__ = .;
|
||||
. += __process6_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process6_stack_end__ = .;
|
||||
__process7_stack_base__ = .;
|
||||
. += __process7_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process7_stack_end__ = .;
|
||||
. = ALIGN(8);
|
||||
} > ram
|
||||
|
||||
|
@ -330,6 +330,9 @@ main (int argc, char *argv[])
|
||||
ccid_thd = chopstx_create (PRIO_CCID, __stackaddr_ccid,
|
||||
__stacksize_ccid, USBthread, NULL);
|
||||
|
||||
#ifdef PINPAD_CIR_SUPPORT
|
||||
cir_init ();
|
||||
#endif
|
||||
#ifdef PINPAD_DND_SUPPORT
|
||||
msc_init ();
|
||||
#endif
|
||||
|
@ -1215,10 +1215,24 @@ process_command_apdu (void)
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
GPGthread (void *arg)
|
||||
static void * card_thread (chopstx_t thd, struct eventflag *ccid_comm);
|
||||
|
||||
void * __attribute__ ((naked))
|
||||
openpgp_card_thread (void *arg)
|
||||
{
|
||||
struct eventflag *ccid_comm = (struct eventflag *)arg;
|
||||
chopstx_t thd;
|
||||
|
||||
asm ("mov %0, sp" : "=r" (thd));
|
||||
return card_thread (thd, (struct eventflag *)arg);
|
||||
}
|
||||
|
||||
chopstx_t openpgp_card_thd;
|
||||
|
||||
static void *
|
||||
card_thread (chopstx_t thd, struct eventflag *ccid_comm)
|
||||
{
|
||||
openpgp_card_thd = thd;
|
||||
|
||||
openpgp_comm = ccid_comm + 1;
|
||||
|
||||
gpg_init ();
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <chopstx.h>
|
||||
#include <eventflag.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "board.h"
|
||||
|
@ -742,7 +742,7 @@ static void icc_error (struct ccid *c, int offset)
|
||||
usb_lld_write (c->epi->ep_num, icc_reply, ICC_MSG_HEADER_SIZE);
|
||||
}
|
||||
|
||||
extern void *GPGthread (void *arg);
|
||||
extern void *openpgp_card_thread (void *arg);
|
||||
|
||||
extern uint8_t __process3_stack_base__, __process3_stack_size__;
|
||||
const uint32_t __stackaddr_gpg = (uint32_t)&__process3_stack_base__;
|
||||
@ -759,8 +759,8 @@ icc_power_on (struct ccid *c)
|
||||
|
||||
if (c->application == 0)
|
||||
c->application = chopstx_create (PRIO_GPG, __stackaddr_gpg,
|
||||
__stacksize_gpg,
|
||||
GPGthread, (void *)&c->ccid_comm);
|
||||
__stacksize_gpg, openpgp_card_thread,
|
||||
(void *)&c->ccid_comm);
|
||||
|
||||
p[0] = ICC_DATA_BLOCK_RET;
|
||||
p[1] = size_atr;
|
||||
|
Loading…
Reference in New Issue
Block a user