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

altera-lpt.c (1089B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * altera-lpt.c
      4 *
      5 * altera FPGA driver
      6 *
      7 * Copyright (C) Altera Corporation 1998-2001
      8 * Copyright (C) 2010 NetUP Inc.
      9 * Copyright (C) 2010 Abylay Ospan <aospan@netup.ru>
     10 */
     11
     12#include <linux/io.h>
     13#include <linux/kernel.h>
     14#include "altera-exprt.h"
     15
     16static int lpt_hardware_initialized;
     17
     18static void byteblaster_write(int port, int data)
     19{
     20	outb((u8)data, (u16)(port + 0x378));
     21};
     22
     23static int byteblaster_read(int port)
     24{
     25	int data = 0;
     26	data = inb((u16)(port + 0x378));
     27	return data & 0xff;
     28};
     29
     30int netup_jtag_io_lpt(void *device, int tms, int tdi, int read_tdo)
     31{
     32	int data = 0;
     33	int tdo = 0;
     34	int initial_lpt_ctrl = 0;
     35
     36	if (!lpt_hardware_initialized) {
     37		initial_lpt_ctrl = byteblaster_read(2);
     38		byteblaster_write(2, (initial_lpt_ctrl | 0x02) & 0xdf);
     39		lpt_hardware_initialized = 1;
     40	}
     41
     42	data = ((tdi ? 0x40 : 0) | (tms ? 0x02 : 0));
     43
     44	byteblaster_write(0, data);
     45
     46	if (read_tdo) {
     47		tdo = byteblaster_read(1);
     48		tdo = ((tdo & 0x80) ? 0 : 1);
     49	}
     50
     51	byteblaster_write(0, data | 0x01);
     52
     53	byteblaster_write(0, data);
     54
     55	return tdo;
     56}