sync with OpenBSD -current

This commit is contained in:
purplerain 2024-01-21 01:41:26 +00:00
parent ed28f347da
commit cc6742f14d
Signed by: purplerain
GPG Key ID: F42C07F07E2E35B7
20 changed files with 315 additions and 155 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: tar.c,v 1.78 2023/12/27 08:29:41 jca Exp $ */
/* $OpenBSD: tar.c,v 1.79 2024/01/20 17:34:50 jca Exp $ */
/* $NetBSD: tar.c,v 1.5 1995/03/21 09:07:49 cgd Exp $ */
/*-
@ -984,13 +984,28 @@ xheader_add_ts(struct xheader *xhdr, const char *keyword,
{
struct xheader_record *rec;
int reclen, tmplen;
char frac[sizeof(".111222333")] = "";
char *s;
/* Only write subsecond part if non-zero */
if (value->tv_nsec != 0) {
int n;
n = snprintf(frac, sizeof(frac), ".%09ld",
(long)value->tv_nsec);
if (n <= 0)
return -1;
/* Zap trailing zeros */
for (n--; n > 1 && frac[n] == '0'; n--)
frac[n] = '\0';
}
tmplen = MINXHDRSZ;
do {
reclen = tmplen;
tmplen = snprintf(NULL, 0, "%d %s=%lld.%09ld\n", reclen,
keyword, (long long)value->tv_sec, (long)value->tv_nsec);
tmplen = snprintf(NULL, 0, "%d %s=%lld%s\n", reclen,
keyword, (long long)value->tv_sec, frac);
} while (tmplen >= 0 && tmplen != reclen);
if (tmplen < 0)
return -1;
@ -999,8 +1014,8 @@ xheader_add_ts(struct xheader *xhdr, const char *keyword,
if (rec == NULL)
return -1;
rec->reclen = reclen;
if (asprintf(&s, "%d %s=%lld.%09ld\n", reclen, keyword,
(long long)value->tv_sec, (long)value->tv_nsec) < 0) {
if (asprintf(&s, "%d %s=%lld%s\n", reclen, keyword,
(long long)value->tv_sec, frac) < 0) {
free(rec);
return -1;
}

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: mimmutable.2,v 1.3 2022/11/06 20:15:44 jmc Exp $
.\" $OpenBSD: mimmutable.2,v 1.4 2024/01/20 13:19:37 deraadt Exp $
.\"
.\" Copyright (c) 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@ -29,7 +29,7 @@
.\"
.\" @(#)mimmutable.2 8.1 (Berkeley) 6/9/93
.\"
.Dd $Mdocdate: November 6 2022 $
.Dd $Mdocdate: January 20 2024 $
.Dt MIMMUTABLE 2
.Os
.Sh NAME
@ -81,16 +81,3 @@ The
.Fn mimmutable
function first appeared in
.Ox 7.3 .
.Sh CAVEATS
At present,
.Xr mprotect 2
may reduce permissions on immutable pages marked
.Dv PROT_READ | PROT_WRITE
to the less permissive
.Dv PROT_READ .
This one-way operation is permitted for an introductory period to observe how
software uses this mechanism.
It may change to require explicit mutable region annotation with
.Va __attribute__((section(".openbsd.mutable")))
and explicit calls to
.Fn mimmutable .

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: compress.3,v 1.25 2023/08/18 06:08:19 tb Exp $
.\" $OpenBSD: compress.3,v 1.26 2024/01/20 11:16:27 tb Exp $
.\"
.\" Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
.\"
@ -23,7 +23,7 @@
.\"
.\" This page corresponds to zlib version 1.2.3
.\"
.Dd $Mdocdate: August 18 2023 $
.Dd $Mdocdate: January 20 2024 $
.Dt COMPRESS 3
.Os
.Sh NAME
@ -95,7 +95,9 @@
.Nm adler32_combine ,
.Nm crc32 ,
.Nm crc32_z ,
.Nm crc32_combine
.Nm crc32_combine ,
.Nm crc32_combine_gen ,
.Nm crc32_combine_op
.Nd zlib general purpose compression library
.Sh SYNOPSIS
.In zlib.h
@ -251,6 +253,8 @@ Checksum functions
.Fn crc32_z "uLong adler" "const Bytef *buf" "z_size_t len"
.Ft uLong
.Fn crc32_combine "uLong crc1" "uLong crc2" "z_off_t len2"
.Fn crc32_combine_gen "z_off_t len2"
.Fn crc32_combine_op "uLong crc1" "uLong crc2" "uLong op"
.Sh DESCRIPTION
This manual page describes the
.Nm zlib
@ -3433,6 +3437,33 @@ CRC-32 check values are calculated for each, crc1 and crc2.
.Fn crc32_combine
returns the CRC-32 check value of seq1 and seq2 concatenated,
requiring only crc1, crc2, and len2.
len2 must be non-negative.
.It Xo
.Fa uLong
.Fn crc32_combine_gen "z_off_t len2" ;
.Xc
.Pp
The
.Fn crc32_combine_gen
function returns the operator corresponding to the length len2,
to be used with
.Fn crc32_combine_op .
len2 must be non-negative.
.It Xo
.Fa uLong
.Fn crc32_combine_op "uLong crc1" "uLong crc2" "uLong op" ;
.Xc
.Pp
The
.Fn crc32_combine_op
function gives the same result as
.Fn crc32_combine ,
using op in place of len2.
op is generated from len2 by
.Fn crc32_combine_gen .
This is faster than
.Fn crc32_combine
if the generated op is used more than once.
.El
.Sh STRUCTURES
.Bd -unfilled

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.4 2022/03/29 23:12:30 tb Exp $
# $OpenBSD: Makefile,v 1.5 2024/01/20 11:29:40 tb Exp $
# compile and run zlib test files from upstream
# https://github.com/madler/zlib/tree/master/test
@ -14,6 +14,9 @@ CPPFLAGS= -I${.CURDIR}/../../../lib/libz
WARNINGS= Yes
CLEANFILES= foo.gz in out out.gz
# infcover uses the internal inflate_table, so link it statically
LDADD_infcover = -Wl,-Bstatic -lz -Wl,-Bdynamic
REGRESS_TARGETS= run-regress-example run-regress-infcover
.for stategy in default filtered huffman rle

View File

@ -1,4 +1,4 @@
/* $OpenBSD: vmmvar.h,v 1.97 2024/01/10 04:13:59 dv Exp $ */
/* $OpenBSD: vmmvar.h,v 1.98 2024/01/20 20:11:24 mlarkin Exp $ */
/*
* Copyright (c) 2014 Mike Larkin <mlarkin@openbsd.org>
*
@ -28,7 +28,7 @@
#define VMM_MAX_NAME_LEN 64
#define VMM_MAX_VCPUS 512
#define VMM_MAX_VCPUS_PER_VM 64
#define VMM_MAX_VM_MEM_SIZE 32L * 1024 * 1024 * 1024 /* 32 GiB */
#define VMM_MAX_VM_MEM_SIZE 128L * 1024 * 1024 * 1024
#define VMM_MAX_NICS_PER_VM 4
#define VMM_PCI_MMIO_BAR_BASE 0xF0000000ULL

View File

@ -1,4 +1,4 @@
/* $OpenBSD: apldart.c,v 1.19 2023/12/23 18:28:38 kettenis Exp $ */
/* $OpenBSD: apldart.c,v 1.20 2024/01/20 11:22:46 kettenis Exp $ */
/*
* Copyright (c) 2021 Mark Kettenis <kettenis@openbsd.org>
*
@ -61,6 +61,10 @@
#define DART_T8020_TTBR_BASE 0x0200
#define DART_T8020_TTBR_VALID (1U << 31)
#define DART_T8110_PARAMS3 0x0008
#define DART_T8110_PARAMS3_REV_MIN(x) (((x) >> 0) & 0xff)
#define DART_T8110_PARAMS3_REV_MAJ(x) (((x) >> 8) & 0xff)
#define DART_T8110_PARAMS3_VA_WIDTH(x) (((x) >> 16) & 0x3f)
#define DART_T8110_PARAMS4 0x000c
#define DART_T8110_PARAMS4_NSID_MASK (0x1ff << 0)
#define DART_T8110_TLB_CMD 0x0080
@ -155,6 +159,7 @@ struct apldart_softc {
bus_dma_tag_t sc_dmat;
int sc_node;
int sc_ias;
int sc_nsid;
int sc_nttbr;
int sc_shift;
@ -168,6 +173,7 @@ struct apldart_softc {
bus_addr_t sc_dvabase;
bus_addr_t sc_dvaend;
bus_addr_t sc_dvamask;
struct apldart_stream **sc_as;
struct iommu_device sc_id;
@ -219,7 +225,7 @@ int apldart_t8110_intr(void *);
void apldart_t8020_flush_tlb(struct apldart_softc *, int);
void apldart_t8110_flush_tlb(struct apldart_softc *, int);
int apldart_load_map(struct apldart_stream *, bus_dmamap_t);
int apldart_load_map(struct apldart_stream *, bus_dmamap_t, int);
void apldart_unload_map(struct apldart_stream *, bus_dmamap_t);
int apldart_dmamap_create(bus_dma_tag_t, bus_size_t, int, bus_size_t,
@ -252,7 +258,8 @@ apldart_attach(struct device *parent, struct device *self, void *aux)
{
struct apldart_softc *sc = (struct apldart_softc *)self;
struct fdt_attach_args *faa = aux;
uint32_t config, params2, params4, tcr, ttbr;
uint64_t dva_range[2];
uint32_t config, maj, min, params2, params3, params4, tcr, ttbr;
int sid, idx;
if (faa->fa_nreg < 1) {
@ -273,7 +280,9 @@ apldart_attach(struct device *parent, struct device *self, void *aux)
power_domain_enable(sc->sc_node);
if (OF_is_compatible(sc->sc_node, "apple,t8110-dart")) {
params3 = HREAD4(sc, DART_T8110_PARAMS3);
params4 = HREAD4(sc, DART_T8110_PARAMS4);
sc->sc_ias = DART_T8110_PARAMS3_VA_WIDTH(params3);
sc->sc_nsid = params4 & DART_T8110_PARAMS4_NSID_MASK;
sc->sc_nttbr = 1;
sc->sc_sid_enable_base = DART_T8110_SID_ENABLE_BASE;
@ -284,7 +293,10 @@ apldart_attach(struct device *parent, struct device *self, void *aux)
sc->sc_ttbr_base = DART_T8110_TTBR_BASE;
sc->sc_ttbr_valid = DART_T8110_TTBR_VALID;
sc->sc_flush_tlb = apldart_t8110_flush_tlb;
maj = DART_T8110_PARAMS3_REV_MAJ(params3);
min = DART_T8110_PARAMS3_REV_MIN(params3);
} else {
sc->sc_ias = 32;
sc->sc_nsid = 16;
sc->sc_nttbr = 4;
sc->sc_sid_enable_base = DART_T8020_SID_ENABLE;
@ -295,6 +307,7 @@ apldart_attach(struct device *parent, struct device *self, void *aux)
sc->sc_ttbr_base = DART_T8020_TTBR_BASE;
sc->sc_ttbr_valid = DART_T8020_TTBR_VALID;
sc->sc_flush_tlb = apldart_t8020_flush_tlb;
maj = min = 0;
}
if (OF_is_compatible(sc->sc_node, "apple,t6000-dart") ||
@ -312,6 +325,19 @@ apldart_attach(struct device *parent, struct device *self, void *aux)
sc->sc_locked = 1;
}
if (maj != 0 || min != 0)
printf(" rev %d.%d", maj, min);
printf(": %d bits", sc->sc_ias);
/*
* Anything over 36 bits requires 4-level page tables which we
* don't implement yet. So limit to 36 bits.
*/
if (sc->sc_ias > 36)
sc->sc_ias = 36;
sc->sc_dvamask = (1ULL << sc->sc_ias) - 1;
/*
* Resetting the DART used for the display controller will
* kill the framebuffer. This should be the only DART that
@ -346,25 +372,33 @@ apldart_attach(struct device *parent, struct device *self, void *aux)
!sc->sc_locked && !sc->sc_translating) {
for (sid = 0; sid < sc->sc_nsid; sid++)
HWRITE4(sc, DART_TCR(sc, sid), sc->sc_tcr_bypass);
printf(": bypass\n");
printf(", bypass\n");
return;
}
if (sc->sc_locked)
printf(": locked\n");
printf(", locked\n");
else if (sc->sc_translating)
printf(": translating\n");
printf(", translating\n");
else
printf("\n");
/*
* Skip the first page to help catching bugs where a device is
* doing DMA to/from address zero because we didn't properly
* set up the DMA transfer. Skip the last page to avoid using
* the address reserved for MSIs.
*/
sc->sc_dvabase = DART_PAGE_SIZE;
sc->sc_dvaend = 0xffffffff - DART_PAGE_SIZE;
if (OF_getpropint64array(sc->sc_node, "apple,dma-range",
dva_range, sizeof(dva_range)) == sizeof(dva_range)) {
sc->sc_dvabase = dva_range[0];
sc->sc_dvaend = dva_range[0] + dva_range[1] - 1;
} else {
/*
* Restrict ourselves to 32-bit addresses to cater for
* devices that don't do 64-bit DMA. Skip the first
* page to help catching bugs where a device is doing
* DMA to/from address zero because we didn't properly
* set up the DMA transfer. Skip the last page to
* avoid using the address reserved for MSIs.
*/
sc->sc_dvabase = DART_PAGE_SIZE;
sc->sc_dvaend = 0xffffffff - DART_PAGE_SIZE;
}
if (!sc->sc_locked && !sc->sc_translating) {
/* Disable translations. */
@ -430,7 +464,7 @@ apldart_resume(struct apldart_softc *sc)
return;
}
ntte = howmany(sc->sc_dvaend, DART_PAGE_SIZE);
ntte = howmany((sc->sc_dvaend & sc->sc_dvamask), DART_PAGE_SIZE);
nl2 = howmany(ntte, DART_PAGE_SIZE / sizeof(uint64_t));
nl1 = howmany(nl2, DART_PAGE_SIZE / sizeof(uint64_t));
@ -495,7 +529,7 @@ apldart_init_locked_stream(struct apldart_stream *as)
uint32_t ttbr;
vaddr_t startva, endva, va;
paddr_t pa;
bus_addr_t dva, dvaend;
bus_addr_t dva, dvaend, dvabase;
volatile uint64_t *l1;
int nl1, nl2, ntte;
int idx;
@ -510,15 +544,23 @@ apldart_init_locked_stream(struct apldart_stream *as)
nl2 = idx * (DART_PAGE_SIZE / sizeof(uint64_t));
ntte = nl2 * (DART_PAGE_SIZE / sizeof(uint64_t));
dvaend = (bus_addr_t)ntte * DART_PAGE_SIZE;
dvabase = sc->sc_dvabase & ~sc->sc_dvamask;
dvaend = dvabase + (bus_addr_t)ntte * DART_PAGE_SIZE;
if (dvaend < sc->sc_dvaend)
sc->sc_dvaend = dvaend;
as->as_dvamap = extent_create(sc->sc_dev.dv_xname,
sc->sc_dvabase, sc->sc_dvaend, M_DEVBUF,
NULL, 0, EX_WAITOK | EX_NOCOALESCE);
as->as_dvamap = extent_create(sc->sc_dev.dv_xname, 0, ULONG_MAX,
M_DEVBUF, NULL, 0, EX_WAITOK | EX_NOCOALESCE);
if (sc->sc_dvabase > 0) {
extent_alloc_region(as->as_dvamap, 0, sc->sc_dvabase,
EX_WAITOK);
}
if (sc->sc_dvaend < ULONG_MAX) {
extent_alloc_region(as->as_dvamap, sc->sc_dvaend + 1,
ULONG_MAX - sc->sc_dvaend, EX_WAITOK);
}
ntte = howmany(sc->sc_dvaend, DART_PAGE_SIZE);
ntte = howmany((sc->sc_dvaend & sc->sc_dvamask), DART_PAGE_SIZE);
nl2 = howmany(ntte, DART_PAGE_SIZE / sizeof(uint64_t));
nl1 = howmany(nl2, DART_PAGE_SIZE / sizeof(uint64_t));
@ -545,12 +587,8 @@ apldart_init_locked_stream(struct apldart_stream *as)
dva = idx * (DART_PAGE_SIZE / sizeof(uint64_t)) *
DART_PAGE_SIZE;
dvaend = dva + DART_PAGE_SIZE * DART_PAGE_SIZE - 1;
if (dva < sc->sc_dvabase)
dva = sc->sc_dvabase;
if (dvaend > sc->sc_dvaend)
dvaend = sc->sc_dvaend;
extent_alloc_region(as->as_dvamap, dva,
dvaend - dva + 1, EX_CONFLICTOK);
extent_alloc_region(as->as_dvamap, dvabase + dva,
dvaend - dva + 1, EX_WAITOK | EX_CONFLICTOK);
} else {
as->as_l2[idx] = apldart_dmamem_alloc(sc->sc_dmat,
DART_PAGE_SIZE, DART_PAGE_SIZE);
@ -593,9 +631,16 @@ apldart_alloc_stream(struct apldart_softc *sc, int sid)
return as;
}
as->as_dvamap = extent_create(sc->sc_dev.dv_xname,
sc->sc_dvabase, sc->sc_dvaend, M_DEVBUF,
NULL, 0, EX_WAITOK | EX_NOCOALESCE);
as->as_dvamap = extent_create(sc->sc_dev.dv_xname, 0, ULONG_MAX,
M_DEVBUF, NULL, 0, EX_WAITOK | EX_NOCOALESCE);
if (sc->sc_dvabase > 0) {
extent_alloc_region(as->as_dvamap, 0, sc->sc_dvabase,
EX_WAITOK);
}
if (sc->sc_dvaend < ULONG_MAX) {
extent_alloc_region(as->as_dvamap, sc->sc_dvaend + 1,
ULONG_MAX - sc->sc_dvaend, EX_WAITOK);
}
/*
* Build translation tables. We pre-allocate the translation
@ -603,7 +648,7 @@ apldart_alloc_stream(struct apldart_softc *sc, int sid)
* worry about growing them in an mpsafe manner later.
*/
ntte = howmany(sc->sc_dvaend, DART_PAGE_SIZE);
ntte = howmany((sc->sc_dvaend & sc->sc_dvamask), DART_PAGE_SIZE);
nl2 = howmany(ntte, DART_PAGE_SIZE / sizeof(uint64_t));
nl1 = howmany(nl2, DART_PAGE_SIZE / sizeof(uint64_t));
@ -730,7 +775,7 @@ apldart_t8110_flush_tlb(struct apldart_softc *sc, int sid)
volatile uint64_t *
apldart_lookup_tte(struct apldart_stream *as, bus_addr_t dva)
{
int idx = dva / DART_PAGE_SIZE;
int idx = (dva & as->as_sc->sc_dvamask) / DART_PAGE_SIZE;
int l2_idx = idx / (DART_PAGE_SIZE / sizeof(uint64_t));
int tte_idx = idx % (DART_PAGE_SIZE / sizeof(uint64_t));
volatile uint64_t *l2;
@ -740,7 +785,7 @@ apldart_lookup_tte(struct apldart_stream *as, bus_addr_t dva)
}
int
apldart_load_map(struct apldart_stream *as, bus_dmamap_t map)
apldart_load_map(struct apldart_stream *as, bus_dmamap_t map, int flags)
{
struct apldart_softc *sc = as->as_sc;
struct apldart_map_state *ams = map->_dm_cookie;
@ -757,8 +802,18 @@ apldart_load_map(struct apldart_stream *as, bus_dmamap_t map)
len = apldart_round_page(map->dm_segs[seg].ds_len + off);
mtx_enter(&as->as_dvamap_mtx);
error = extent_alloc_with_descr(as->as_dvamap, len,
DART_PAGE_SIZE, 0, 0, EX_NOWAIT, &ams[seg].ams_er, &dva);
if (flags & BUS_DMA_FIXED) {
dva = apldart_trunc_page(map->dm_segs[seg].ds_addr);
/* XXX truncate because "apple,dma-range" mismatch */
if (dva > sc->sc_dvaend)
dva &= sc->sc_dvamask;
error = extent_alloc_region_with_descr(as->as_dvamap,
dva, len, EX_NOWAIT, &ams[seg].ams_er);
} else {
error = extent_alloc_with_descr(as->as_dvamap, len,
DART_PAGE_SIZE, 0, 0, EX_NOWAIT, &ams[seg].ams_er,
&dva);
}
mtx_leave(&as->as_dvamap_mtx);
if (error) {
apldart_unload_map(as, map);
@ -887,7 +942,7 @@ apldart_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
if (error)
return error;
error = apldart_load_map(as, map);
error = apldart_load_map(as, map, flags);
if (error)
sc->sc_dmat->_dmamap_unload(sc->sc_dmat, map);
@ -907,7 +962,7 @@ apldart_dmamap_load_mbuf(bus_dma_tag_t t, bus_dmamap_t map,
if (error)
return error;
error = apldart_load_map(as, map);
error = apldart_load_map(as, map, flags);
if (error)
sc->sc_dmat->_dmamap_unload(sc->sc_dmat, map);
@ -927,7 +982,7 @@ apldart_dmamap_load_uio(bus_dma_tag_t t, bus_dmamap_t map,
if (error)
return error;
error = apldart_load_map(as, map);
error = apldart_load_map(as, map, flags);
if (error)
sc->sc_dmat->_dmamap_unload(sc->sc_dmat, map);
@ -940,14 +995,25 @@ apldart_dmamap_load_raw(bus_dma_tag_t t, bus_dmamap_t map,
{
struct apldart_stream *as = t->_cookie;
struct apldart_softc *sc = as->as_sc;
int error;
int i, error;
error = sc->sc_dmat->_dmamap_load_raw(sc->sc_dmat, map,
segs, nsegs, size, flags);
if (error)
return error;
if (flags & BUS_DMA_FIXED) {
if (map->dm_nsegs != nsegs)
return EINVAL;
for (i = 0; i < nsegs; i++) {
if (map->dm_segs[i].ds_len != segs[i].ds_len)
return EINVAL;
map->dm_segs[i]._ds_paddr = segs[i].ds_addr;
map->dm_segs[i]._ds_vaddr = segs[i]._ds_vaddr;
}
} else {
error = sc->sc_dmat->_dmamap_load_raw(sc->sc_dmat, map,
segs, nsegs, size, flags);
if (error)
return error;
}
error = apldart_load_map(as, map);
error = apldart_load_map(as, map, flags);
if (error)
sc->sc_dmat->_dmamap_unload(sc->sc_dmat, map);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: apldc.c,v 1.11 2023/09/22 01:10:43 jsg Exp $ */
/* $OpenBSD: apldc.c,v 1.12 2024/01/20 08:00:59 kettenis Exp $ */
/*
* Copyright (c) 2022 Mark Kettenis <kettenis@openbsd.org>
*
@ -299,6 +299,12 @@ struct apldchidev_softc {
uint8_t sc_mtdesc[APLDCHIDEV_DESC_MAX];
size_t sc_mtdesclen;
int sc_mt_ready;
int sc_x_min;
int sc_x_max;
int sc_y_min;
int sc_y_max;
int sc_h_res;
int sc_v_res;
struct apldchidev_gpio sc_gpio[APLDCHIDEV_NUM_GPIOS];
u_int sc_ngpios;
@ -307,6 +313,8 @@ struct apldchidev_softc {
uint8_t sc_cmd_iface;
uint8_t sc_cmd_seq;
uint8_t sc_data[APLDCHIDEV_DESC_MAX];
size_t sc_data_len;
uint32_t sc_retcode;
int sc_busy;
};
@ -555,10 +563,20 @@ struct mtp_gpio_ack {
uint8_t cmd[512];
} __packed;
struct mtp_dim {
uint32_t width;
uint32_t height;
int16_t x_min;
int16_t y_min;
int16_t x_max;
int16_t y_max;
};
#define MTP_CMD_RESET_INTERFACE 0x40
#define MTP_CMD_SEND_FIRMWARE 0x95
#define MTP_CMD_ENABLE_INTERFACE 0xb4
#define MTP_CMD_ACK_GPIO_CMD 0xa1
#define MTP_CMD_GET_DIMENSIONS 0xd9
void
apldchidev_handle_gpio_req(struct apldchidev_softc *sc, uint8_t iface,
@ -770,6 +788,13 @@ apldchidev_rx_intr(void *arg)
printf("%s: got ack with unexpected seq\n",
sc->sc_dev.dv_xname);
}
if (MTP_REQ(shdr->flags) == MTP_REQ_GET_REPORT &&
shdr->len <= sizeof(sc->sc_data)) {
memcpy(sc->sc_data, (shdr + 1), shdr->len);
sc->sc_data_len = shdr->len;
} else {
sc->sc_data_len = 0;
}
sc->sc_retcode = shdr->retcode;
sc->sc_busy = 0;
wakeup(sc);
@ -1021,6 +1046,30 @@ apldchidev_load_firmware(struct apldchidev_softc *sc, const char *name)
return 0;
}
void
apldchidev_get_dimensions(struct apldchidev_softc *sc)
{
uint8_t cmd[1] = { MTP_CMD_GET_DIMENSIONS };
struct mtp_dim dim;
uint8_t flags;
flags = MTP_GROUP_CMD << MTP_GROUP_SHIFT;
flags |= MTP_REQ_GET_REPORT << MTP_REQ_SHIFT;
apldchidev_cmd(sc, sc->sc_iface_mt, flags, cmd, sizeof(cmd));
apldchidev_wait(sc);
if (sc->sc_retcode == 0 && sc->sc_data_len == sizeof(dim) + 1 &&
sc->sc_data[0] == MTP_CMD_GET_DIMENSIONS) {
memcpy(&dim, &sc->sc_data[1], sizeof(dim));
sc->sc_x_min = dim.x_min;
sc->sc_x_max = dim.x_max;
sc->sc_y_min = dim.y_min;
sc->sc_y_max = dim.y_max;
sc->sc_h_res = (100 * (dim.x_max - dim.x_min)) / dim.width;
sc->sc_v_res = (100 * (dim.y_max - dim.y_min)) / dim.height;
}
}
void
apldchidev_attachhook(struct device *self)
{
@ -1059,6 +1108,8 @@ apldchidev_attachhook(struct device *self)
if (error)
goto out;
apldchidev_get_dimensions(sc);
aa.aa_name = "multi-touch";
aa.aa_desc = sc->sc_mtdesc;
aa.aa_desclen = sc->sc_mtdesclen;
@ -1277,17 +1328,18 @@ struct ubcmtp_finger {
#define DEFAULT_PRESSURE 40
struct apldcms_softc {
struct device sc_dev;
struct device *sc_wsmousedev;
struct device sc_dev;
struct apldchidev_softc *sc_hidev;
struct device *sc_wsmousedev;
int sc_enabled;
int sc_enabled;
int tp_offset;
int tp_fingerpad;
int tp_offset;
int tp_fingerpad;
struct mtpoint frame[UBCMTP_MAX_FINGERS];
int contacts;
int btn;
struct mtpoint frame[UBCMTP_MAX_FINGERS];
int contacts;
int btn;
};
int apldcms_enable(void *);
@ -1331,6 +1383,8 @@ apldcms_attach(struct device *parent, struct device *self, void *aux)
struct apldcms_softc *sc = (struct apldcms_softc *)self;
struct wsmousedev_attach_args aa;
sc->sc_hidev = (struct apldchidev_softc *)parent;
printf("\n");
sc->tp_offset = UBCMTP_TYPE4_TPOFF;
@ -1349,13 +1403,14 @@ apldcms_configure(struct apldcms_softc *sc)
{
struct wsmousehw *hw = wsmouse_get_hw(sc->sc_wsmousedev);
/* The values below are for the MacBookPro17,1 */
hw->type = WSMOUSE_TYPE_TOUCHPAD;
hw->hw_type = WSMOUSEHW_CLICKPAD;
hw->x_min = -6046;
hw->x_max = 6536;
hw->y_min = -164;
hw->y_max = 7439;
hw->x_min = sc->sc_hidev->sc_x_min;
hw->x_max = sc->sc_hidev->sc_x_max;
hw->y_min = sc->sc_hidev->sc_y_min;
hw->y_max = sc->sc_hidev->sc_y_max;
hw->h_res = sc->sc_hidev->sc_h_res;
hw->v_res = sc->sc_hidev->sc_v_res;
hw->mt_slots = UBCMTP_MAX_FINGERS;
hw->flags = WSMOUSEHW_MT_TRACKING;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: bus.h,v 1.9 2023/01/21 10:30:11 kettenis Exp $ */
/* $OpenBSD: bus.h,v 1.10 2024/01/20 11:22:46 kettenis Exp $ */
/*
* Copyright (c) 2003-2004 Opsycon AB Sweden. All rights reserved.
*
@ -335,6 +335,7 @@ bus_space_barrier(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
#define BUS_DMA_ZERO 0x0800 /* zero memory in dmamem_alloc */
#define BUS_DMA_NOCACHE 0x1000
#define BUS_DMA_64BIT 0x2000 /* device handles 64bit dva */
#define BUS_DMA_FIXED 0x4000 /* place mapping at specified dva */
/* Forwards needed by prototypes below. */
struct mbuf;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: acct.h,v 1.14 2023/12/11 00:39:43 deraadt Exp $ */
/* $OpenBSD: acct.h,v 1.15 2024/01/20 12:16:55 deraadt Exp $ */
/* $NetBSD: acct.h,v 1.16 1995/03/26 20:23:52 jtc Exp $ */
/*-
@ -66,7 +66,6 @@ struct acct {
#define APLEDGE 0x00000020 /* killed due to pledge violation */
#define ATRAP 0x00000040 /* memory access violation */
#define AUNVEIL 0x00000080 /* unveil access violation */
#define AEXECVE 0x00000100 /* execve from wrong libc stub */
#define APINSYS 0x00000200 /* syscall pin violation */
u_int32_t ac_flag; /* accounting flags */
};

View File

@ -1,4 +1,4 @@
/* $OpenBSD: uvm_map.c,v 1.320 2024/01/16 19:05:01 deraadt Exp $ */
/* $OpenBSD: uvm_map.c,v 1.323 2024/01/21 00:26:14 deraadt Exp $ */
/* $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */
/*
@ -3144,13 +3144,15 @@ uvm_map_protect(struct vm_map *map, vaddr_t start, vaddr_t end,
if (iter->start == iter->end || UVM_ET_ISHOLE(iter))
continue;
if (checkimmutable &&
(iter->etype & UVM_ET_IMMUTABLE)) {
if (checkimmutable && (iter->etype & UVM_ET_IMMUTABLE)) {
#ifdef SMALL_KERNEL
if (iter->protection == (PROT_READ | PROT_WRITE) &&
new_prot == PROT_READ) {
/* Permit RW to R as a data-locking mechanism */
;
} else {
} else
#endif
{
error = EPERM;
goto out;
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: control.c,v 1.130 2023/05/31 16:51:46 op Exp $ */
/* $OpenBSD: control.c,v 1.131 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2012 Gilles Chehade <gilles@poolp.org>
@ -107,7 +107,8 @@ control_imsg(struct mproc *p, struct imsg *imsg)
c = tree_get(&ctl_conns, imsg->hdr.peerid);
if (c == NULL)
return;
m_compose(&c->mproc, IMSG_CTL_OK, 0, 0, imsg->fd, NULL, 0);
m_compose(&c->mproc, IMSG_CTL_OK, 0, 0, imsg_get_fd(imsg),
NULL, 0);
return;
case IMSG_STAT_INCREMENT:

View File

@ -1,4 +1,4 @@
/* $OpenBSD: enqueue.c,v 1.121 2023/05/31 16:51:46 op Exp $ */
/* $OpenBSD: enqueue.c,v 1.122 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2005 Henning Brauer <henning@bulabula.org>
@ -808,7 +808,7 @@ open_connection(void)
errx(1, "unexpected imsg reply type");
}
fd = imsg.fd;
fd = imsg_get_fd(&imsg);
imsg_free(&imsg);
break;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: lka.c,v 1.247 2021/06/14 17:58:15 eric Exp $ */
/* $OpenBSD: lka.c,v 1.248 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
@ -47,7 +47,7 @@ static void
lka_imsg(struct mproc *p, struct imsg *imsg)
{
struct table *table;
int ret;
int ret, fd;
struct sockaddr_storage ss;
struct userinfo userinfo;
struct addrname addrname;
@ -305,7 +305,7 @@ lka_imsg(struct mproc *p, struct imsg *imsg)
return;
case IMSG_LKA_OPEN_FORWARD:
lka_session_forward_reply(imsg->data, imsg->fd);
lka_session_forward_reply(imsg->data, imsg_get_fd(imsg));
return;
case IMSG_LKA_AUTHENTICATE:
@ -351,7 +351,7 @@ lka_imsg(struct mproc *p, struct imsg *imsg)
m_add_string(p, procname);
m_close(p);
lka_proc_forked(procname, subsystems, imsg->fd);
lka_proc_forked(procname, subsystems, imsg_get_fd(imsg));
return;
case IMSG_LKA_PROCESSOR_ERRFD:
@ -359,8 +359,9 @@ lka_imsg(struct mproc *p, struct imsg *imsg)
m_get_string(&m, &procname);
m_end(&m);
lka_proc_errfd(procname, imsg->fd);
shutdown(imsg->fd, SHUT_WR);
fd = imsg_get_fd(imsg);
lka_proc_errfd(procname, fd);
shutdown(fd, SHUT_WR);
return;
case IMSG_REPORT_SMTP_LINK_CONNECT:

View File

@ -1,4 +1,4 @@
/* $OpenBSD: mda.c,v 1.146 2023/05/31 16:51:46 op Exp $ */
/* $OpenBSD: mda.c,v 1.147 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@ -113,7 +113,7 @@ mda_imsg(struct mproc *p, struct imsg *imsg)
uint64_t reqid;
size_t sz;
char out[256], buf[LINE_MAX];
int n;
int n, fd;
enum lka_resp_status status;
enum mda_resp_status mda_status;
int mda_sysexit;
@ -196,7 +196,8 @@ mda_imsg(struct mproc *p, struct imsg *imsg)
s = tree_xget(&sessions, reqid);
e = s->evp;
if (imsg->fd == -1) {
fd = imsg_get_fd(imsg);
if (fd == -1) {
log_debug("debug: mda: cannot get message fd");
mda_queue_tempfail(e->id,
"Cannot get message fd",
@ -208,11 +209,11 @@ mda_imsg(struct mproc *p, struct imsg *imsg)
log_debug("debug: mda: got message fd %d "
"for session %016"PRIx64 " evpid %016"PRIx64,
imsg->fd, s->id, e->id);
fd, s->id, e->id);
if ((s->datafp = fdopen(imsg->fd, "r")) == NULL) {
if ((s->datafp = fdopen(fd, "r")) == NULL) {
log_warn("warn: mda: fdopen");
close(imsg->fd);
close(fd);
mda_queue_tempfail(e->id, "fdopen failed",
ESC_OTHER_MAIL_SYSTEM_STATUS);
mda_log(e, "TempFail", "fdopen failed");
@ -283,7 +284,8 @@ mda_imsg(struct mproc *p, struct imsg *imsg)
s = tree_xget(&sessions, reqid);
e = s->evp;
if (imsg->fd == -1) {
fd = imsg_get_fd(imsg);
if (fd == -1) {
log_warn("warn: mda: fail to retrieve mda fd");
mda_queue_tempfail(e->id, "Cannot get mda fd",
ESC_OTHER_MAIL_SYSTEM_STATUS);
@ -294,10 +296,10 @@ mda_imsg(struct mproc *p, struct imsg *imsg)
log_debug("debug: mda: got mda fd %d "
"for session %016"PRIx64 " evpid %016"PRIx64,
imsg->fd, s->id, s->evp->id);
fd, s->id, s->evp->id);
io_set_nonblocking(imsg->fd);
io_set_fd(s->io, imsg->fd);
io_set_nonblocking(fd);
io_set_fd(s->io, fd);
io_set_write(s->io);
return;
@ -315,8 +317,9 @@ mda_imsg(struct mproc *p, struct imsg *imsg)
* Grab last line of mda stdout/stderr if available.
*/
out[0] = '\0';
if (imsg->fd != -1)
mda_getlastline(imsg->fd, out, sizeof(out));
fd = imsg_get_fd(imsg);
if (fd != -1)
mda_getlastline(fd, out, sizeof(out));
/*
* Choose between parent's description of error and

View File

@ -1,4 +1,4 @@
/* $OpenBSD: mproc.c,v 1.39 2021/06/14 17:58:15 eric Exp $ */
/* $OpenBSD: mproc.c,v 1.40 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2012 Eric Faurot <eric@faurot.net>
@ -223,7 +223,7 @@ void
m_forward(struct mproc *p, struct imsg *imsg)
{
imsg_compose(&p->imsgbuf, imsg->hdr.type, imsg->hdr.peerid,
imsg->hdr.pid, imsg->fd, imsg->data,
imsg->hdr.pid, imsg_get_fd(imsg), imsg->data,
imsg->hdr.len - sizeof(imsg->hdr));
if (imsg->hdr.type != IMSG_STAT_DECREMENT &&

View File

@ -1,4 +1,4 @@
/* $OpenBSD: mta_session.c,v 1.150 2024/01/03 08:11:15 op Exp $ */
/* $OpenBSD: mta_session.c,v 1.151 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
@ -269,7 +269,7 @@ mta_session_imsg(struct mproc *p, struct imsg *imsg)
struct msg m;
uint64_t reqid;
const char *name;
int status;
int status, fd;
struct stat sb;
switch (imsg->hdr.type) {
@ -279,14 +279,15 @@ mta_session_imsg(struct mproc *p, struct imsg *imsg)
m_get_id(&m, &reqid);
m_end(&m);
fd = imsg_get_fd(imsg);
s = mta_tree_pop(&wait_fd, reqid);
if (s == NULL) {
if (imsg->fd != -1)
close(imsg->fd);
if (fd != -1)
close(fd);
return;
}
if (imsg->fd == -1) {
if (fd == -1) {
log_debug("debug: mta: failed to obtain msg fd");
mta_flush_task(s, IMSG_MTA_DELIVERY_TEMPFAIL,
"Could not get message fd", 0, 0);
@ -295,12 +296,12 @@ mta_session_imsg(struct mproc *p, struct imsg *imsg)
}
if ((s->ext & MTA_EXT_SIZE) && s->ext_size != 0) {
if (fstat(imsg->fd, &sb) == -1) {
if (fstat(fd, &sb) == -1) {
log_debug("debug: mta: failed to stat msg fd");
mta_flush_task(s, IMSG_MTA_DELIVERY_TEMPFAIL,
"Could not stat message fd", 0, 0);
mta_enter_state(s, MTA_READY);
close(imsg->fd);
close(fd);
return;
}
if (sb.st_size > (off_t)s->ext_size) {
@ -308,12 +309,12 @@ mta_session_imsg(struct mproc *p, struct imsg *imsg)
mta_flush_task(s, IMSG_MTA_DELIVERY_PERMFAIL,
"message too large for peer", 0, 0);
mta_enter_state(s, MTA_READY);
close(imsg->fd);
close(fd);
return;
}
}
s->datafp = fdopen(imsg->fd, "r");
s->datafp = fdopen(fd, "r");
if (s->datafp == NULL)
fatal("mta: fdopen");

View File

@ -1,4 +1,4 @@
/* $OpenBSD: queue.c,v 1.195 2023/05/31 16:51:46 op Exp $ */
/* $OpenBSD: queue.c,v 1.196 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@ -126,7 +126,7 @@ queue_imsg(struct mproc *p, struct imsg *imsg)
return;
case IMSG_QUEUE_SMTP_SESSION:
bounce_fd(imsg->fd);
bounce_fd(imsg_get_fd(imsg));
return;
case IMSG_LKA_ENVELOPE_SUBMIT:

View File

@ -1,4 +1,4 @@
/* $OpenBSD: queue_proc.c,v 1.9 2021/06/14 17:58:16 eric Exp $ */
/* $OpenBSD: queue_proc.c,v 1.10 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@ -170,7 +170,7 @@ queue_proc_message_fd_r(uint32_t msgid)
queue_proc_call();
queue_proc_end();
return (imsg.fd);
return (imsg_get_fd(&imsg));
}
static int

View File

@ -1,4 +1,4 @@
/* $OpenBSD: smtp_session.c,v 1.439 2024/01/03 08:11:15 op Exp $ */
/* $OpenBSD: smtp_session.c,v 1.440 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@ -702,7 +702,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
const char *line, *helo;
uint64_t reqid, evpid;
uint32_t msgid;
int status, success;
int status, success, fd;
int filter_response;
const char *filter_param;
uint8_t i;
@ -802,19 +802,20 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
m_get_int(&m, &success);
m_end(&m);
fd = imsg_get_fd(imsg);
s = tree_xpop(&wait_queue_fd, reqid);
if (!success || imsg->fd == -1) {
if (imsg->fd != -1)
close(imsg->fd);
if (!success || fd == -1) {
if (fd != -1)
close(fd);
smtp_reply(s, "421 %s Temporary Error",
esc_code(ESC_STATUS_TEMPFAIL, ESC_OTHER_MAIL_SYSTEM_STATUS));
smtp_enter_state(s, STATE_QUIT);
return;
}
log_debug("smtp: %p: fd %d from queue", s, imsg->fd);
log_debug("smtp: %p: fd %d from queue", s, fd);
if (smtp_message_fd(s->tx, imsg->fd)) {
if (smtp_message_fd(s->tx, fd)) {
if (!SESSION_DATA_FILTERED(s))
smtp_message_begin(s->tx);
else
@ -828,19 +829,20 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
m_get_int(&m, &success);
m_end(&m);
fd = imsg_get_fd(imsg);
s = tree_xpop(&wait_filter_fd, reqid);
if (!success || imsg->fd == -1) {
if (imsg->fd != -1)
close(imsg->fd);
if (!success || fd == -1) {
if (fd != -1)
close(fd);
smtp_reply(s, "421 %s Temporary Error",
esc_code(ESC_STATUS_TEMPFAIL, ESC_OTHER_MAIL_SYSTEM_STATUS));
smtp_enter_state(s, STATE_QUIT);
return;
}
log_debug("smtp: %p: fd %d from lka", s, imsg->fd);
log_debug("smtp: %p: fd %d from lka", s, fd);
smtp_filter_fd(s->tx, imsg->fd);
smtp_filter_fd(s->tx, fd);
smtp_message_begin(s->tx);
return;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: smtpd.c,v 1.346 2023/06/18 17:28:42 op Exp $ */
/* $OpenBSD: smtpd.c,v 1.347 2024/01/20 09:01:03 claudio Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@ -917,7 +917,8 @@ setup_proc(void)
env->sc_queue_key = strdup(imsg.data);
break;
case IMSG_SETUP_PEER:
setup_peer(imsg.hdr.peerid, imsg.hdr.pid, imsg.fd);
setup_peer(imsg.hdr.peerid, imsg.hdr.pid,
imsg_get_fd(&imsg));
break;
case IMSG_SETUP_DONE:
setup = 0;
@ -1866,19 +1867,11 @@ log_imsg(int to, int from, struct imsg *imsg)
if (to == PROC_CONTROL && imsg->hdr.type == IMSG_STAT_SET)
return;
if (imsg->fd != -1)
log_trace(TRACE_IMSG, "imsg: %s <- %s: %s (len=%zu, fd=%d)",
proc_name(to),
proc_name(from),
imsg_to_str(imsg->hdr.type),
imsg->hdr.len - IMSG_HEADER_SIZE,
imsg->fd);
else
log_trace(TRACE_IMSG, "imsg: %s <- %s: %s (len=%zu)",
proc_name(to),
proc_name(from),
imsg_to_str(imsg->hdr.type),
imsg->hdr.len - IMSG_HEADER_SIZE);
log_trace(TRACE_IMSG, "imsg: %s <- %s: %s (len=%zu)",
proc_name(to),
proc_name(from),
imsg_to_str(imsg->hdr.type),
imsg->hdr.len - IMSG_HEADER_SIZE);
}
const char *